C++中的面向对象笔记
公共继承,相当于属于关系。如CLASS B:public A,表示B就是A,A做到的,B也能做到。
CLASS A {}; CLASS B:public A {}; A a; B b; a=b;//错误,因为a不一定是b b=a;//正确,b就是a
public继承下,会出现名字覆盖:B与A若有同名函数,则A中的该函数将被覆盖,包括A中该函数的重载函数。
关于虚函数
含有纯虚函数如: virtual void fun()=0; 的类是抽象类,我们不能创建抽象类的对象。若A中有纯虚函数,则A a=new A是错的,而A a=new B才是正确的。
纯虚函数:
派生类中必须重新声明该函数。(声明一个纯虚函数的目的是为了让派生类只继承接口)
纯虚函数的实现,需要申请才能使用,如下所示
CLASS A { virtual void fun()=0; }; void A::fun() { //实现 } CLASS B { virtual void fun() { A::fun();//需要声明使用A的实现 } }; CLASS C { virtual void fun();//可以自己实现 }; void C::fun() { //C的fun }
非纯虚函数:
派生类会继承该函数的声明与实现,可自己实现以覆盖。不安全的原因是:派生类忘记自定义继承过来的函数时,会使用默认的实现(即基类的实现)。而此 默认的函数实现可能不适合此派生类。
非虚函数:
抽象类(只能是抽象类)会强制派生类继承该类的非虚函数,即抽象类的非虚函数将会覆盖所有派生类的同名函数,此做法刚好与非抽象类的继承相反。
总结:
在公共继承下,纯虚函数、非纯虚函数和非虚函数在抽象类的继承当中的作用分别是:只继承接口、继承接口与默认实现、继承接口及强制实现。