仮想関数#
仮想関数(virtual function)は、基底クラスで定義された関数を、派生クラスで再定義することです。
仮想関数を使用するには、基底クラスで仮想関数を定義する必要があります。
仮想関数を定義するには、仮想関数を定義する前に「virtual」というキーワードを使用します。
例えば、次のように基底クラスで仮想関数を定義することができます
#include <cstdio>
class Human {
public:
int age;
int tone;
char name[256];
Human(int age, int tone, const char* name) {
this->age = age;
this->tone = tone;
strcpy(this->name, name);
}
// 仮想関数の定義
virtual void greet()
{
printf("Hello, I'm %s. I'm %d years old.\n", name, age);
}
};
仮想関数を使用することで、基底クラスで定義された関数を、派生クラスで再定義することができます。
派生クラスで仮想関数を再定義する場合、「override」というキーワードを使用することで、明示的に仮想関数を再定義することができます。
これにより、基底クラスのインタフェースを維持しつつ、派生クラスで独自の振る舞いを実装することができます。
Burgerであれば、そもそも名前と年齢を言う必要がないので、greet()を再定義することで、名前と年齢を言わないようにすることにしましょう。
class Burger : public Human {
public:
Burger(int age, int tone, const char* name) : Human(age, tone, name) {}
void greet() override
{
printf("Hello, how are you?");
}
};
int main()
{
Human human(20, 180, "Taro");
human.greet();
Burger burger(20, 180, "Taro");
burger.greet();
}
実行結果
Hello, I'm Taro. I'm 20 years old.
Hello, how are you?