类的组合

当创建类的对象时,如果这个类具有内嵌的对象成员,那么各个内嵌对象也被自动创建(也要调用相应的

构造函数)。
此时构造函数的调用顺序是:
(1)按照内嵌对象在组合类的构造函数定义中出现的次序,依次调用内嵌对象的构造函数
(2)执行本类构造函数的函数体。

#include <iostream.h>
#include <math.h>
class Point
{
public:
 Point(int xx=0,int yy=0)
 {
  X=xx;Y=yy;
  cout<<"Point类构造函数被调用"<<endl;
 } //内联构造函数

    Point(Point &p);
 int GetX(){return X;}
 int GetY(){return Y;}
private:
 int X,Y;
};

Point::Point(Point &p)  //拷贝构造函数
{
 X=p.X;
 Y=p.Y;
 cout<<"Point类拷贝构造函数被调用"<<endl;
}

class Distance
{
public:
 Distance(Point xp1,Point xp2);
 double GetDis(){return dist;}
private:
 Point p1,p2;
 double dist;
};

//组合类的构造函数

Distance::Distance(Point xp1,Point xp2):p1(xp1),p2(xp2)
//Distance::Distance(Point xp1,Point xp2):p1(0,0),p2(0,16)
//此处若修改成这样,则调用的是Point类的构造函数,而不是拷贝构造函数。
{
 cout<<"Distance的构造函数被调用"<<endl;
 double x=double(p1.GetX()-p2.GetX());
 double y=double(p1.GetY()-p2.GetY());
 dist=sqrt(x*x+y*y);
}

void main()
{
 Point myp1(1,1),myp2(4,5); //此处Point类拷贝构造函数不做调用
 Distance myd(myp1,myp2); //此处进行函数的型参和实参结合,Point类拷贝构造函数调用2次
// 要对内嵌的对象成员初始化,Point类拷贝构造函数调用2次,Distance类构造函数调用1次
 cout<<"The diatance is:";
// cout<<myd.dist<<endl; 私有变量不能直接访问,只能通过接口成员函数访问
 cout<<myd.GetDis()<<endl;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值