这是我今天看书刚刚看到的,觉着以前对这一块内容了解不多,所以整理一下分享给大家。首先要介绍一下子对象的概念。类的数据成员不仅可以是int、char这样的基本类型,也可以是类对象,如可以包含这样的数据成员:
Student s1; //Student是已经声明的类
这时s1就是类对象中的内嵌对象,即为
子对象,这与结构体类型的成员可以是结构体变量类似。
回顾一下简单派生类构造函数的写法:
class student { public: student(int n,string nam,char s){ num=n; name=nam; sex=s; } ~student(){} protected: int num; string name; char sex; }; class student1:public student{ public: student1(int n,string nam,char s,int a,string ad):student(n,nam,s){ age=a; addr=ad; } ~student1(){} private: int age; string addr; };
派生类一般构造函数格式为
派生类名 (总参数列表):基类名(参数列表){派生类新增数据成员初始化语句;}
子对象的派生类构造函数如何写呢?
我们都知道对象应该在建立之时就初始化,但显然子对象的初始化不能在声明派生类时就对它进行,因为类是抽象类型,只是一个模型,不能有具体的数据。所以子对象的初始化是在建立派生类时通过调用派生类构造函数来实现的。在刚才的例子中增加一个班长项,班长的类型很显然就是student,所以它是一个子对象,现在构造函数如下:
student1(int n,string nam,char s,int n1,string nam1,char s1,int a,string ad): student(n,nam,s),monitor(n1,nam1,s1){ age=a; addr=ad; }
在上面构造函数中一共有八个参数,前三个是基类构造函数的参数,第4、5、6个参数是子对象构造函数参数,最后两个是用作派生类数据成员初始化的。
归纳一下,构造函数格式如下
派生类构造函数名(总参数列表):基类构造函数名(参数列表),子对象名(参数列表)
{派生类新增数据成员初始化语句}