纯虚函数是指类似 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.上述代码输出什么?