感谢这位大佬 **
@Loup&卡普
** 给我提供的思考题,这是一个很有意思的题目。
#include <iostream>
using namespace std;
class A
{
private:
int nVal;
public:
void Fun() { cout << "A::Fun" << endl; }
void Do() { cout << "A::Do" << endl; }
};
class B : public A
{
public:
virtual void Do() { cout << "B::Do" << endl; }
};
class C : public B
{
public:
void Do() { cout << "C::Do" << endl; }
void Fun() { cout << "C::Fun" << endl; }
};
void Call(B &p)
{
p.Fun();
p.Do();
}
int main(int argc, char* argv[])
{
C c ;
Call(c);
return 0;
}
//运行结果
//A::Fun
//C::Do
Call(B &p) 传进去的是一个B类型的指针,C类型的对象,因为B继承A,且B中没有Fun函数,所以调用A的Fun函数。
而C重写了B的虚函数DO(),是实现多态的原理,调用了C的Do()函数