3个回答
展开全部
你运行一下下面的代码,就明白了。
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:
如果是虚函数,而且派生类的函数签名与基类的签名一致,那么,基类的该同名函数指针已经被覆盖了,所以,就不可能再调用到基类的同签名函数了。非虚函数才可以使用上面的方面来调用。
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:
如果是虚函数,而且派生类的函数签名与基类的签名一致,那么,基类的该同名函数指针已经被覆盖了,所以,就不可能再调用到基类的同签名函数了。非虚函数才可以使用上面的方面来调用。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询