A から B を派生させ、B から C を次のように派生させた場合:
A
|
B
|
C
virtual
ほとんどの場合、A に 1 つまたは複数の仮想関数が含まれます。ここで、うっかりB の関数宣言にキーワードを入れるのを忘れてしまいました。しかし、驚いたことに、仮想が B でも設定されているかのように動作します。これがコードです。
#include <iostream>
using std::cout;
using std::endl;
class A
{
public:
virtual void foo(){cout << "A\n";};
};
class B : public A
{
public:
void foo(){cout << "B\n";} // a "virtual doesn't change the behaviour...
};
class C : public B
{
public:
void foo(){cout << "C\n";}
};
int main()
{
C c;
c.foo();
A *pa = new C;
pa->foo();
B *pb = new C;
pb->foo();
return 0;
}
virtual
inも省略するA
と、出力は次のようになります。
C
A
B
そうでなければ
C
C
C
なくてvirtual
もB
!
だから:キーワードは何らかの方法で固定されていますか?それとも、ここで何か間違っていることを理解していますか?