C++子对象派生类构造函数

6.2 有子对象的派生类的构造函数

经过前面的学习,我们了解了C++的继承。在派生类的构造函数中,需要对基类的构造函数进行调用,初始化从基类继承过来的数据。

那么,如果在派生类的成员变量中定义了C++类对象,那么,在派生类的构造函数中,怎么样初始化C++类对象的成员变量?例如:

//定义一个类,继承自student类;

class student_new: private student

{

public:

char name[32]; //姓名

char addr[32]; //家庭地址

student my_stud;

public:

student_new(int n, char* pname, char s, int a, char* paddr);

...

};

在定义student_new派生类的时候,定义类的成员变量,其中my_stud成员变量是一个student类对象。

所以,一个类的成员变量,可以是其他类的对象。此时,my_stud就是类对象中的内嵌对象,称为:子对象(subobject),即对象中的对象。

我们定义一个基类student,然后,派生类student_new从基类student派生而来。同时, student_new中成员变量中有一个student类对象。 在建立student_new对象的时候,对他的成员变量进行初始化。那么,怎么样对student类型的子对象初始化呢?

子对象的初始化,应该是在建立派生类时,通过派生类的构造函数来实现的。

派生类构造函数的任务应该包括3 个部分:

(1) 对基类成员变量初始化。

(2) 对子对象成员变量初始化。

(3) 对派生类成员变量初始化。

那么,定义派生类构造函数的一般形式为:

派生类构造函数名(总参数列表):基类构造函数名(参数列表),子对象名(参数列表)

{ ... }

所以,执行派生类构造函数的顺序是:

(1) 调用基类构造函数,对基类成员变量初始化。

(2) 调用子对象构造函数,对子对象成员变量初始化。

(3) 再执行派生类构造函数本身,对派生类成员变量初始化。

所以,我们可以编写一个例子来验证该知识点,测试代码如下:

程序运行结果如下:

可以看到,定义了基类student和派生类student_new,在student_new的成员变量中,定义了一个student类型的子对象my_stud。

所以,在student_new的构造函数中,需要对子对象my_stud进行初始化。所以,派生类student_new的构造函数如下:

student_new::student_new(char* pn, char* pa, long long n):

student(pn, pa),my_stud("abc", "china")

{

number = n;

}

可以看到,定义派生类student_new的构造函数,同时,调用基类student的构造函数。然后,对子对象my_stud进行初始化。

对my_stud对象初始化的时候,就是调用该类对象的构造函数,给对象传递初始化的参数。完成对象的初始化。

如果有多个子对象,派生类构造函数的写法依此类推,应该列出每一个子对象名及其参数列表。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韦凯峰Linux编程学堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值