Line类调用Point类的两个对象p1,p2作为其数据成员,计算线段长度

组合类构造函数定义的一般形式为:

  类名::类名(形参表):内嵌对象1(形参表),内嵌对象2(形参表)...

  {类的初始化}

Line例子(课本例子学习):

 #include<iostream>
#include<cmath>
using namespace std;
class Point{
public:
//隐式内联构造函数(显示inline)
Point(int newX,int newY){
x=newX;
y=newY;
}
//复制构造函数
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;
} //类的组合
class Line{
public:
Line(Point xp1,Point xp2);
Line(Line &q);
double getLen(){return len;}
private:
Point p1,p2;
double len;
};
//组合类的构造函数
Line::Line(Point xp1,Point xp2):p1(xp1),p2(xp2){
double x=static_cast<double>(p1.getX()-p2.getX());
double y=static_cast<double>(p1.getY()-p2.getY());
len=sqrt(x*x+y*y);
}
//组合类的复制构造函数
Line::Line(Line &q):p1(q.p1),p2(q.p2){
cout<<"calling the copy construct of Line"<<endl;
len=q.len;
} void fun1(Point p){
cout<<"fun1:"<<p.getX()<<","<<p.getY()<<endl;
}
Point fun2(){
Point a(,);
return a;
}
int main(){
//Point
Point a(,);
Point b=a;
cout<<"test point:x="<<b.getX()<<endl;
fun1(b);
b=fun2();
cout<<"test point:x="<<b.getX()<<endl;
//Line
//point类的复制构造函数被调用了6次
//两个对象在Line构造函数进行函数参数形实参结合时+初始化内嵌对象时+复制构造line2时被调>用
cout<<"------------"<<endl;
Point m(,),n(,);
Line line(m,n);
cout<<"line:"<<line.getLen()<<endl;
Line line2(line);
cout<<"line2:"<<line2.getLen()<<endl; return ;
}

运行结果Ubuntu下g++编译:

C++类的组合例子的更多相关文章

  1. Java编程的逻辑 (14) - 类的组合

    ​本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...

  2. [ python ] 类的组合

    首先,使用面向对象是一个人狗大战的实例: class Person: def __init__(self, name, hp, aggr, sex): self.name = name self.hp ...

  3. day31 类的组合及继承,文件目录规范

    Python之路,Day18 = Python基础18-面向对象继承与组合 类的继承 def talk(): print("I am come from talk..a") cla ...

  4. C++:类的组合

    在类中定义的数据成员一般都是基本数据类型或服复合数据类型.但是还可以根据需要使用 其他类的对象作为正在声明的数据成员.复杂的对象还可以有比较简单的对象一某种方式组合 而成,复杂对象和组成它的简单对象之 ...

  5. c++基础语法 构造函数 析构函数 类的组合

    1 构造函数 1.不能指定任何返回值,甚至连void都不能有. 2.与Java不同,c++不同new对象,对于无参的构造函数声明对象时括号应该省略. 2 析构函数 1. 前加~,不能有参数,不能有返回 ...

  6. c++,类的组合

    1. 在A类中以B类的对象作为成员变量,称为类的组合(composition). 可以先看看这篇文章理解组合的用处: C++中组合的使用 http://blog.csdn.net/jia_xiaoxi ...

  7. 【C++基础】类的组合

    所谓类的组合是指:类中的成员数据是还有一个类的对象或者是还有一个类的指针或引用.通过类的组合能够在已有的抽象的基础上实现更复杂的抽象. 比如: 1.按值组合 #include<iostream. ...

  8. python - class类 (三) 类的组合

    类的组合: #组合 class A1(): def pr(self): return 'a1' class A2(): def pr(self): return 'a2' class A3(): de ...

  9. python类的组合

    类的组合,即在类实例化时,将另一个类的实例作为参数传入,这样可以将两个实例关联起来. 当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好. 例如,描述一个机器人类,这个大类是由很多 ...

随机推荐

  1. 常见的CSS

    /***** Selector Hacks ******/ /* IE6 and below */ * html #uno { color: red } /* IE7 */ *:first-child ...

  2. 启动和停止SQL Server服务三种形式

    1.后台启动和停止服务 计算机>右键>管理>服务和应用>服务>sqlserver(MSSSQLSERVER) 2.配置管理器启动和停止服务 开始>所有程序>M ...

  3. 11.2.0.1单实例DGduplicate过程

    记录一次duplicate完整过程1)环境说明数据库版本oracle11.2.0.1,os linux 6.6备库应用的归档,最近一次是三个月前,由于DG环境以前是好的,因此直接迁移数据即可.本次使用 ...

  4. office2013 Word 缺少校对工具,按提示下载、安装了文件还是不成功的解决方案

    找到你的office安装源iso镜像加载 ——点开镜像双击setup.exe ——选择添加或删除功能 ——下一步——其他的不要动,展开office共享功能项 ——找到校对工具点出下拉项(点朝下的黑色箭 ...

  5. git配置代理

    1.查看当前代理 git config --global http.proxy 2.配置git走代理,可走http代理也可以走socks5代理,可根据自己的代理协议而定 #http代理 git con ...

  6. loadrunner---Android、iOS压力测试

    链接来源:http://www.cnblogs.com/ydnice/p/5790848.html 一.LoadRunner简介 LoadRunner,是惠普公司研发的一款预测系统行为和性能的负载测试 ...

  7. 第四次SCRUM任务

    一.第四次SCRUM任务 继第三次的任务之后,对最终的部署做一定的完善,以及系统的BUG调试,压力测试,会议明确最终的方案. 二.用户故事 1.用户可以进行输入用户名密码登录和注册. 2.用户可以在程 ...

  8. DEBUG经历

    在两年有余的学习生活中,我不仅在课堂上学到了很多东西,我也在一次次的错误中得到了宝贵的经验和教训.Bug和debug,构成了我生活中不可或缺的一部分. 我在编程中犯过的错误很多,无法一一阐述,再次说一 ...

  9. Classloader精简重点

    如果想学习classloader的具体内容,请goodu JVM 在运行时会产生三个ClassLoader,Bootstrap ClassLoader.Extension ClassLoader和 A ...

  10. java项目---用java实现简单TCP服务器监听(3星)

    ---------------------------------------------服务端----------------------------------------------- 1 pa ...