初学C++:继承与内嵌类

对书本上继承与派生部分的描述一直看得不是很明白,做个小实验,增进理解:

#include<iostream>    using namespace std;   class A{       protected:            //这里本来是private            int m;       public:           A(int x);           int get();   };   class Test:public A{       private:           int a;           const int b;       public:           Test();           void print();   };      Test::Test():a(4),b(5),A(3){   }      void Test::print(){       cout<<a<<" "<<b<<" "<<m<<endl;   }   A::A(int x){       m=x;   }   int A::get(){       return m;   }      int main(){       Test t;       t.print();       return 0;   }  

类的继承:

派生类可以继承基类的所有成员。

在派生类中,成员可以按访问属性划分为一下4中:

(1)不可访问的成员。这是从基类私有成员继承而来的,派生类或是建立派生类对象的模块都没有办法访问到它们。如果从派生类继续派生新类,也是无法访问到的。

(2)私有成员。这里可以包括从基类继承过来的成员以及新增加的成员,在派生类内部可以访问,但是从建立派生类对象的模块中无法访问,继续派生,就变成了新的派生类中不可访问成员。

(3)保护成员。可能是新增加的也可能是从基类继承过来的,派生类内部可以访问,建立派生类对象的模块无法访问,进一步派生,在新的派生类中可能成为私有成员或者保护成员。

(4)公有成员。派生类、建立派生类的模块都可以访问,继续派生,可能是新派生类中的私有、保护或者公有成员。

内嵌类及其初始化:

类的初始化函数定义中可以添加内嵌对象成员的初始化列表。也可以添加基类的构造函数。

当创建类的对象时,如果这个类具有内嵌对象成员,那么各个内嵌对象将首先被自动创建。因此,在创建对象时既要对本类的基本类型数据成员进行初始化,又要对内嵌对象成员进行初始化。对基本类型的数据成员也可以这样初始化。

在创建一个组合类的对象时,不仅它自身的构造函数的函数体将被执行,而且还将调用其内嵌对象的构造函数。这时构造函数的调用顺序如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/pssgz.html