纯虚函数是指类似 virtual void Do()=0 的函数,含有纯虚函数的类是抽象类,不能实例化对象,其子类需实现所有纯虚函数方能实例化对象。
以上面向对象的规则读者应该都比较清楚,但有个问题大多数教程都没有详细说明。若class A有2个虚函数Do1、Do2;class B继承自A,实现了Do1;class C继承自B,实现了Do2。那么请问C能不能实例化对象?
答案是可以。可以这样考虑,当思考C是否能实例化对象时,就看其是否实现了其父类(farther)B中的纯虚函数是否全部实现。而B中只有1个(从A继承来的)纯虚函数Do2,被C所实现。所以C可以实例化对象。
上代码:
class A
{
public:
virtual void Do()=0;
virtual void Play()=0;
};
class B : public A
{
public:
void Do()
{
cout << "Do By B;" << endl;
}
};
class C:public B
{
public:
void Play()
{
cout<<"Play By C;" << endl;
}
};
void ShowWhoDo(A &aa)
{
aa.Do();
aa.Play();
}
void main()
{
//A a;
//ShowWhoDo(a);
//B b;
//ShowWhoDo(b);
C c;
ShowWhoDo(c);
system("pause");
}
顺便再来个问题,1. void ShowWhoDo(A &aa)中&能否不要?2.上述代码输出什么?