详解C++编程中多级派生时的构造函数和访问属性
C++多层派生时的构造函数 通过例下面的程序,读者可以了解在多级派生情况下怎样定义派生类的构造函数。相信大家完全可以自己看懂这个程序。 [例] 多级派生情况下派生类的构造函数。 #include <iostream> #include<string> using namespace std; class Student//声明基类 { public://公用部分 Student(int n,string nam)//基类构造函数 { num=n; name=nam; } void display( )//输出基类数据成员 { cout<<"num:"<<num<<endl; cout<<"name:"<<name<<endl; } protected://保护部分 int num;//基类有两个数据成员 string name; }; class Student1: public Student//声明公用派生类Student1 { public: Student1(int n,char nam[10],int a):Student(n,nam)//派生类构造函数 {age=a;}//在此处只对派生类新增的数据成员初始化 void show( ) //输出num,name和age { display( ); //输出num和name cout<<"age: "<<age<<endl; } private://派生类的私有数据 int age; //增加一个数据成员 }; class Student2:public Student1 //声明间接公用派生类Student2 { public://下面是间接派生类构造函数 Student2(int n,string nam,int a,int s):Student1(n,nam,a) {score=s;} void show_all( ) //输出全部数据成员 { show( ); //输出num和name cout<<"score:"<<score<<endl; //输出age } private: int score; //增加一个数据成员 }; int main( ) { Student2 stud(10010,"Li",17,89); stud.show_all( ); //输出学生的全部数据 return 0; } 运行时的输出如下: num:10010 name:Li age:17 score:89 请注意基类和两个派生类的构造函数的写法。 基类的构造函数首部: Student(int n,string nam)
Student1(int n,string nam],nam)
Student2(int n,a)
Student2(int n,nam),student1(n,a) 不要列出每一层派生类的构造函数,只需写出其上一层派生类(即它的直接基类)的构造函数即可。在声明Student2类对象时,调用Student2构造函数;在执行Student2构造函数时,先调用Student1构造函数;在执行Student1构造函数时,先调用基类Student构造函数。初始化的顺序是: C++类多级派生时的访问属性 在多级派生的情况下,各成员的访问属性仍按以上原则确定。 为了把多重继承说的更加详细,请大家先看下面的几个继承的类。 [例] 如果声明了以下的类: class A //基类 { public: int i; protected: void f2( ); int j; private: int k; }; class B: public A //public方式 { public: void f3( ); protected: void f4( ); private: int m; }; class C: protected B //protected方式 { public: void f5( ); private: int n; }; 类A是类B的公用基类,类B是类C的保护基类。各成员在不同类中的访问属性如下: 根据以上分析,在派生类C的外面只能访问类C的成员函数f5,不能访问其他成员。 派生类C的成员函数f5能访问基类A的成员i、f2、j和派生类B的成员f3、f4。派生类B 的成员函数f3、f4能访问基类A的成员i、f2和j。 通过以上分析,可以看到:无论哪一种继承方式,在派生类中是不能访问基类的私有成员的,私有成员只能被本类的成员函数所访问,毕竟派生类与基类不是同一个类。 如果在多级派生时都采用公用继承方式,那么直到最后一级派生类都能访问基类的公用成员和保护成员。 如果采用私有继承方式,经过若干次派生之后,基类的所有的成员已经变成不可访问的了。 如果采用保护继承方式,在派生类外是无法访问派生类中的任何成员的。 而且经过多次派生后,人们很难清楚地记住哪些成员可以访问,哪些成员不能访问,很容易出错。因此,在实际中,常用的是公用继承。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |