C++学习笔记八

24、子对象
》当一个类的成员时另一个类的对象时,该对象就为子对象。
》子对象即是对象的成员
》当类中出现了子对象(对象成员),该类的构造函数要包含对子对象的初始化,
  通常采用成员初始化列表的方法来初始化子对象;
#include<iostream.h>
class A 
{
public:
A(int i,int j) { A1 = i;A2 = j;}
void Print()   { cout<<A1<<","<<A2<<endl; }
private:
int A1,A2;
};
class B
{
public:
B(int i,int j,int k):a(i,j),b(k){}     //成员初始化列表,私有成员可以通过这种方式初始化
void Print();
private:
A a; //定义在私有成员
int b; //定义在私有成员
};
void B::Print()
{
a.Print();
cout<<b<<endl;
}
void main()
{
B b(7,8,9);
b.Print();
}
总结:a.成员初始化列表,私有成员可以通过这种方式初始化
      b.被成员初始化列表初始化的变量都定义在私有成员,也包括前面的const变量。

    子对象(二)    (50_子对象(复杂点))
#include"whole.h"
void main()
{
Whole anObject(5,6,10);//Constructor of Whole.错误!!!
  //Constructor of Part
  //Constructor of Part

anObject.Print();      //6
  //5
}   //10
  //Destructor of Part 
  //Destructor of Part 
  //Destructor of Whole.错误!!! 
总结:
  在主函数中,调用一个对象Whole,而且对象中有对象成员Part,则构造时将会先构造调用的对象成员Part,
再构造Whole。
  退出时,也要先析构Part对象,再析构Whole对象。
a.子对象必须在成员初始化列表中初始化;
b.建立一个对象时,它的所有子对象一起建立; //重要
c.先执行子对象构造函数,在执行对象的构造函数。
d.析构函数的执行顺序与构造函数的执行顺序严格相反。
e.构造函数的调用顺序仅与子对象在类中声明的顺序有关,而与成员初始化列表中给出的对构造   
  函数的调用顺序无关
  //难点:即构造函数的调用顺序不是跟成员初始化列表中的赋值顺序有关,而是与类子对象声明
    顺序有关。
f.构造函数的成员初始化列表中未给出对子对象的调用,则表示使用子对象的缺省构造函数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值