你运行一下下面的代码,就明白了。
class C
{
public:
void Test()
{
printf( "C.Test()\n" );
}
};
class B : public C
{
public:
void Test()
{
printf( "B.Test()\n" );
}
};
class A : public B
{
public:
void Test()
{
printf( "A.Test()\n" );
}
void BTest()
{
B::Test();
}
void CTest()
{
C::Test();
}
};
void main()
{
A * a = new A();
a->Test();
( ( B * ) a )->Test();
( ( C * ) a )->Test();
a->BTest();
a->CTest();
delete a;
}
PS:
如果是虚函数,而且派生类的函数签名与基类的签名一致,那么,基类的该同名函数指针已经被覆盖了,所以,就不可能再调用到基类的同签名函数了。非虚函数才可以使用上面的方面来调用。
这就是c++的多态了。。
虚函数应用,可以区分。
如果子类要调用父类的函数,可以不再声明该函数,前提 是基类不要是纯虚的。
这种行为被称为overwrite