C++类的组合例子
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++类的组合例子的更多相关文章
- Java编程的逻辑 (14) - 类的组合
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...
- [ python ] 类的组合
首先,使用面向对象是一个人狗大战的实例: class Person: def __init__(self, name, hp, aggr, sex): self.name = name self.hp ...
- day31 类的组合及继承,文件目录规范
Python之路,Day18 = Python基础18-面向对象继承与组合 类的继承 def talk(): print("I am come from talk..a") cla ...
- C++:类的组合
在类中定义的数据成员一般都是基本数据类型或服复合数据类型.但是还可以根据需要使用 其他类的对象作为正在声明的数据成员.复杂的对象还可以有比较简单的对象一某种方式组合 而成,复杂对象和组成它的简单对象之 ...
- c++基础语法 构造函数 析构函数 类的组合
1 构造函数 1.不能指定任何返回值,甚至连void都不能有. 2.与Java不同,c++不同new对象,对于无参的构造函数声明对象时括号应该省略. 2 析构函数 1. 前加~,不能有参数,不能有返回 ...
- c++,类的组合
1. 在A类中以B类的对象作为成员变量,称为类的组合(composition). 可以先看看这篇文章理解组合的用处: C++中组合的使用 http://blog.csdn.net/jia_xiaoxi ...
- 【C++基础】类的组合
所谓类的组合是指:类中的成员数据是还有一个类的对象或者是还有一个类的指针或引用.通过类的组合能够在已有的抽象的基础上实现更复杂的抽象. 比如: 1.按值组合 #include<iostream. ...
- python - class类 (三) 类的组合
类的组合: #组合 class A1(): def pr(self): return 'a1' class A2(): def pr(self): return 'a2' class A3(): de ...
- python类的组合
类的组合,即在类实例化时,将另一个类的实例作为参数传入,这样可以将两个实例关联起来. 当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好. 例如,描述一个机器人类,这个大类是由很多 ...
随机推荐
- js 防抖 debounce 与 节流 throttle
debounce(防抖) 与 throttle(节流) 主要是用于用户交互处理过程中的性能优化.都是为了避免在短时间内重复触发(比如scrollTop等导致的回流.http请求等)导致的资源浪费问题. ...
- jcifs windows 域账户单点登录(转)
1.首先从http://jcifs.samba.org 这个站点下载 jcifs-1.3.2.jar包. 2.把这个包放到相应的lib文件下面. 3.对web.xml文件进行配置,添加如下内容 < ...
- Python matplotlib.pyplot
Customize the label, title, and ticks. Add Color to bubbles Add Text & Grid
- python 异步发送邮件 aiosmtplib
aiosmtplib is an asynchronous SMTP client for use with asyncio.文档地址 与 smtplib的用法大体相同 有几个地方需要注意下: 加密S ...
- 简易实践的vue自定义tab入门
本文基于vue官方文档,分别为:动态组件 & 异步组件.插槽.进入/离开 & 列表过渡 章节链接描述 要想实现tab动画,首先要了解vue中哪些元素/那些组件适合在那些条件下实现动画效 ...
- Map<String,Integer>acount字符串出现的次数
- 使用 whereis/which/locate 查找文件
whereis命令 whereis只能用于搜索可执行文件 (-b) , 联机帮助文件 (-m) 和源代码文件 (-s) . 它只在一个数据库中查询(/var/lib/mlocate) . 这个数据库是 ...
- Python基础:九、运算符
一.赋值运算 简单的赋值运算符号:= c = a + b #将a+b的元算结果赋值给c 加法赋值运算符:+= c += a #等效于 c = c + a 减法赋值运算符:-= c -= a #等效于 ...
- 【python】问题汇总
1.pip降级 python -m pip install pip==9.0.3 2. Flask利用pymysql出现Warning:1366的解决办法 错误提示:(1366, "Inco ...
- WiFi万能钥匙 for Macv1.1.0中文版
wifi万能钥匙 for Mac是一款运行在Mac平台上的免费WiFi热点软件,Mac分享无线流量.管理WiFi连接的必备神器.WiFi万能钥匙Mac版内置千万Wi-Fi热点数据,随时随地轻松接入无线 ...