您的位置:首页 > 编程语言 > C语言/C++

C++学习笔记八

2015-09-24 21:50 309 查看
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.构造函数的成员初始化列表中未给出对子对象的调用,则表示使用子对象的缺省构造函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: