类的包含(类的组合)
1.组合描述的是类与类之间的整体与部分的关系,即如果在逻辑上A是B的一部分,则允许A和其他数据成员组合成B。例如:发动机、车轮、电池、车门、方向盘、底盘都是小汽车的一部分,它们组合成汽车,而不能说发动机是汽车的一种。
2. 类的组合,指的是类中内嵌其它类的对象作为成员数据:
实现组合用类成员表示,即一个类中的数据成员是另一个已经定义的类的对象。
3. 可以在已有抽象的基础上实现更复杂的抽象。
类包含的构造函数设计
原则:不仅要负责对本类中的基本类型成员数据赋初值,也要对对象成员初始化。
类的构造函数要包含对象成员的初始化。如果构造函数的成员初始化列表没有对成员对象初始化时,则使用成员对象的无参(缺省)构造函数。
声明形式:
类名::类名(对象成员所需的形参,本类成员形参) :对象1(参数),对象2(参数),......
{ 本类初始化 }//初始化列表
类包含的构造函数调用
构造函数调用顺序:
1. 先调用成员对象的构造函数。
2. 当全部成员对象都执行了自身类的构造函数后,再执行当前类的构造函数。
3. 成员对象的构造函数调用次序和成员对象在类中的定义次序一致(若定义顺序为:a1、b1、 b2),与它们在成员初始化列表中出现的次序无关(初始化列表顺序为:b1、b2、a1)。
析构函数的调用顺序相反
用类包含计算两点之间的距离
#include<iostream>
#include<cmath>
using namespace std;
class Point
{ public:
Point(int xi=0,int yi=0) {x=xi;y=yi;}
int GetX(){return x;}
int GetY(){return y;}
private: int x; int y;
};
class Line
{
public:
Line(Point xp1,Point xp2):p1(xp1),p2(xp2){dist=0;}
Line(int xi=0,int yi=0,int xj=0,int yj=0):p1(xi,yi),p2(xj,yj){dist=0;}
void Distance()
{
float x1,y1,x2,y2;
x1=p1.GetX(); y1=p1.GetY();x2=p2.GetX(); y2=p2.GetY();
dist=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
double GetDis() {return dist;}
private:
Point p1, p2;
double dist;
};
int main( )
{
Point p1(2,2),p2(2,5);
Line x1(p1,p2);
x1.Distance();
cout<<x1.GetDis()<<endl;
Line x2(3,2,3,6);
x2.Distance();
cout<<x2.GetDis()<<endl;
return 0;
}
输出
3
4