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
}

  非纯虚函数:

    派生类会继承该函数的声明与实现,可自己实现以覆盖。不安全的原因是:派生类忘记自定义继承过来的函数时,会使用默认的实现(即基类的实现)。而此  默认的函数实现可能不适合此派生类。

 

  非虚函数:

    抽象类(只能是抽象类)会强制派生类继承该类的非虚函数,即抽象类的非虚函数将会覆盖所有派生类的同名函数,此做法刚好与非抽象类的继承相反。

 

总结:

  在公共继承下,纯虚函数、非纯虚函数和非虚函数在抽象类的继承当中的作用分别是:只继承接口、继承接口与默认实现、继承接口及强制实现。

posted @ 2015-04-01 16:17  醉疯少年  阅读(351)  评论(0编辑  收藏  举报