純粋仮想関数#
純粋仮想関数は、クラスの中で宣言された仮想関数のうち、関数の実装がないものです。純粋仮想関数を含むクラスは、純粋仮想関数を実装するまでインスタンス化できません。
純粋仮想関数の宣言#
純粋仮想関数は、関数の宣言の後に = 0
を付けることで宣言できます。
#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() = 0;
};
純粋仮想関数の実装#
純粋仮想関数を実装するには、純粋仮想関数を含むクラスを継承したクラスで、純粋仮想関数を実装する必要があります。
注意:何も実装しない場合でも、関数の実装を記述する必要があります。
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, "John"); <-- Error
// OK -------------------------
Burger burger(20, 180, "Burger");
burger.greet();
}