类的组合
组合的概念:类中的成员数据是另一个类的对象
可以在已有的抽象基础上实现更复杂的抽象
举例:
- class Point
- {
- private:
- float x,y; //点左边
- public:
- Point (float h,float v); //构造函数
- float GetX(void); //取X坐标
- float GetY(void); //取Y坐标
- void Draw(void); //在(x,y)处画点
- };
- //函数的实现略
- class Line
- {
- private:
- point p1mp2; //线段的2个断点
- public:
- Line(Point a,Point b); //构造函数
- Void Draw (void);//画线段
- };
- //函数的实现略
原则:不仅要负责对本类的基本类型成员数据赋初值,也要对对象成员初始化
声明形式:
类名::类名(对象成员所需的形参,本类成员的形参)
:对象1(参数),对象2(参数),……
{本类初始化}
//类名和对象用:分隔
15
构造函数调用顺序:先调用内嵌对象的构造函数(按内嵌时的声明顺序,先声明者先构造)。然后调用本类的构造函数。(析构函数的调用顺序相反)
先成员后自身
若调用缺省构造函数(即无形参的NULL),则内嵌对象的初始化也将调用相应的缺省构造函数。
举例:
- class Part
- {
- public:
- Part();
- Part(int i);
- ~Part();
- void Print();
- private:
- int val;
- };
- class Whole
- {
- public:
- Whole();
- Whole (int i,int j,int k);
- ~Whole();
- void Print();
- private:
- Part one;//执行的先后顺序按这里 先one后two
- Part two;
- int date;
- };
- Whole::Whole()
- {
- date=0;
- }
- Whole::Whole(int i,int j,int k):two(i),one(j),date(k)
- {}
- //..其它函数实现略