继承《一》

    xiaoxiao2021-03-25  65

    继承的概念:

        继承是面向对象程序设计使代码可以复用的最重要的手段,它容许程序员在保持原有类型特性的基础上进行扩展,增加功能。这样产生的类叫新生的类,叫派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知程度。

       继承的定义格式:

    他们在内存中的布局如图所示:说明他们有两个作用域

    而继承方式有三种,分别是:public(公有继承),protected(保护继承),private(私有继承)。

    切记:

    1,基类的私有成员在派生类中是不能被访问的,如果基类成员不想在类外直接被访问,但需要在派生类中能访问,那么继承方式就定义为公有继承(protected)

    2,public继承是一个接口继承,保持is-a原则。

    3,不管是哪种继承方式,在派生类中都可以访问基类的公有成员和保护成员,基类的私有成员存在但在子类中不能访问。

    4,使用关键字class时默认的继承方式是private,使用struct时默认的继承方式是public。

    我们假设有两种情况,a,在D类中包含了B类。b,在D类中私有继承了B类。那么现在如果在B类中有一个保护的成员-b,那么在情况a中是不可以访问的,但是在情况b中是可以访问的。

    派生类中的构造函数和析构函数:

      如下面的简单程序:

    #include<iostream> using namespace std; class B { public: B() { cout << "B()" << endl; } ~B() { cout << "~B()" << endl; } }; class D :public B { public: D() { cout << "D()" << endl; } ~D() { cout << "~D()" << endl; } }; void Funtest() { D d; } int main() { Funtest(); return 0; }输出的结果如图所示:

    这说明函数的执行次序和函数的调用次数是不一样的,函数的执行次序是:基类构造函数->派生类中对象构造函数->派生类构造函数体。而函数的调用次序是:当程序走到D()时,走到初始化列表时程序来到B(),当B()结构体运行完了以后再来到D()的结构体,也就是说先构造属于B()的构造函数,再构造D()自己的结构函数,然后再析构~D,~B。换句话说,D()有一个隐藏的缺省参数:B()

    友元与继承:

      友元关系是不能继承的,即基类友元不能访问子类私有和保护成员。

    继承与转换:

       派生类的值可以附给基类,基类的指针可以指向派生类,反之不行

    多继承:

    如下程序:

    #include<iostream> using namespace std; class B1 { public: int _b1; }; class B2 { public: int _b2; }; class C :public B1, public B2 { public: int _d; }; int main() { int a, b; return 0; } 有两个派生类,它们在内存中的布局:

    而如果把继承的两个类反过来,那么它们在内存中的布局也会反过来。

    转载请注明原文地址: https://ju.6miu.com/read-34586.html

    最新回复(0)