C++ の仮想関数とは何か
C++の仮想関数とは、多態を実現するための特別なメンバ関数のことです。多態とは、オブジェクト指向プログラミングにおける重要な機能で、異なるタイプのオブジェクトを一様に扱うことを可能にします。
仮想関数は、基底クラスで宣言し、派生クラスで再定義することで、動的バインディング(ランタイム多態)を実現します。基底クラスのポインタや参照が派生クラスのオブジェクトを指している場合、仮想関数を呼び出すことで、実際の派生クラスの型に応じて実行される関数が決まります。
虚函数の宣言は、以下のフォーマットで行います。
virtual 返回类型 函数名(参数列表) [const] = 0;
この中で、virtualというキーワードは仮想関数を、= 0は純粋仮想関数を示しています。純粋仮想関数は派生クラスで再定義する必要があり、基底クラスでは実現できません。
仮想関数を使えば、以下のような多態的な振る舞いが実現できます。
class Animal {
public:
virtual void makeSound() {
cout << "Animal makes sound." << endl;
}
};
class Dog : public Animal {
public:
void makeSound() override {
cout << "Dog barks." << endl;
}
};
class Cat : public Animal {
public:
void makeSound() override {
cout << "Cat meows." << endl;
}
};
int main() {
Animal* animal1 = new Dog();
Animal* animal2 = new Cat();
animal1->makeSound(); // 输出 "Dog barks."
animal2->makeSound(); // 输出 "Cat meows."
delete animal1;
delete animal2;
return 0;
}
上で示した例では、Animal クラスの makeSound() 関数は仮想関数として宣言されています。基底クラスのポインタで派生クラスのオブジェクトを参照して makeSound() 関数を呼び出すと、実際に実行される関数は、派生クラスの型に合わせて決定されます。