C++类和对象——(8)类的组合

归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝
人生就像骑单车,想保持平衡就得往前进!

一起加油!

目录

一、什么是类的组合:

二、类组合中的难点是关于它的构造函数设计问题。 

三、例:类的组合,线段类 

🔑说明: 

四、 总结:

五、共勉:


一、什么是类的组合:

        类的组合是指:类中的成员数据是另一个类的对象通过类的组合可以在已有的抽象的基础上实现更复杂的抽象。

二、类组合中的难点是关于它的构造函数设计问题。 

        组合类中有其他类的对象作为成员,这些对象成员也称为类的内嵌对象成员组合类在创建对象时,它的各个内嵌对象将首先被自动创建。因此,在创建对象时既要对本类的基本数据类型数据成员进行初始化,又要对内嵌对象成员进行初始化。组合类构造函数定义的一般形式为:

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

{

                                                类的初始化 

   }

三、例:类的组合,线段类 

#include<iostream>
#include<cmath>
using  namespace std;
class Point{
	private:
		int x;
		int y;
	public:
		Point(int px,int py):x(px),y(py){
			cout<<"Point constructor called"<<endl;
		}
		~Point(){
			cout<<"Point destructor called"<<endl;
		}
		Point(const Point&p){
			x=p.x;
			y=p.y;
			cout<<"Point copy constructor called"<<endl;
		}
		int getx(){
			return x;
		} 
		int gety(){
			return y;
		}
};

class Line{
	private:
		Point p1,p2;
		double len;
	public:
		Line(Point &xp1,Point &xp2);
		~Line(){
			cout<<"Line destructor called"<<endl;
		}
		double getlen(){
			return len;
		}
};

Line::Line(Point &xp1,Point &xp2):p1(xp1),p2(xp2){
	double x=p1.getx()-p2.getx();
	double y=p1.gety()-p2.gety();
	len=sqrt(x*x+y*y); 
	cout<<"Line constructor called"<<endl;
}

int main(){
	Point a(3,4),b(10,9);
	Line ab(a,b);
	cout<<"a start point"<<"("<<a.getx()<<","<<a.gety()<<")"<<endl;
	cout<<"b start point"<<"("<<b.getx()<<","<<b.gety()<<")"<<endl;
	cout<<"The length of the ab is:"<<ab.getlen()<<endl;
	return 0;
}

🔑说明: 

        在程序运行后,先调用 Point 类的构造函数两次,构造 Point 类对象a和b; 然后构造 Line 对象L1,在执行 Line 类的构造函数之前,先调用内嵌对象的构造函数,由于内嵌对象是用已有的 Point 对象进行初始化的,所以调用了两次复制构造函数来完成内嵌对象的初始化;接下来执行组合类 Line 的构造函数体;最后输出相关信息
        程序运行到最后就开始析构对象,先析构 Line 对象。在析构组合类对象时,析构函数的执行顺序正好与构造函数相反。所以先执行Line 类的析构函数,然后执行内嵌对象的析构函数,最后析构主函数中的两个 Point 类对象a和b。

四、 总结:

  • 类中的成员数据是另一个类的对象
  • 通过类的组合可以在已有的抽象的基础上实现更复杂的抽象。
  • 组合类中有其他类的对象作为成员,这些对象成员也称为类的内嵌对象成员
  • 在创建对象时既要对本类的基本数据类型数据成员进行初始化,又要对内嵌对象成员进行初始化。

五、共勉:

        以上就是我对C++类和对象——(8)类的组合的理解,希望本篇文章对你有所帮助,也希望可以支持支持博主,后续博主也会定期更新学习记录,记录学习过程中的点点滴滴。如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对类和对象的理解,请持续关注我哦!!! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/223827.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

香港科技大学广州|机器人与自主系统学域博士招生宣讲会—北京专场!!!(暨全额奖学金政策)

在机器人和自主系统领域实现全球卓越—机器人与自主系统学域 硬核科研实验室&#xff0c;浓厚创新产学研氛围&#xff01; 教授亲临现场&#xff0c;面对面答疑解惑助攻申请&#xff01; 一经录取&#xff0c;享全额奖学金1.5万/月&#xff01; 时间&#xff1a;2023年12月09日…

Python实现广义线性回归模型(statsmodels GLM算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 广义线性模型(Generalized Linear Model&#xff0c;简称GLM)是一种广泛应用于回归分析和分类问题的统…

MySql概述及其性能说明

MySQL是一种开源的关系型数据库管理系统&#xff0c;由瑞典MySQL AB公司开发&#xff0c;现属于Oracle公司。MySQL是最流行的开源数据库之一&#xff0c;被广泛地应用于Web开发中。MySQL提供了一个高度稳定可靠的数据存储解决方案&#xff0c;同时也可以很容易地跨平台运行。My…

前端十几年后的变迁:从代码编织者到创新驱动者

十几年前的前端开发&#xff0c;是一个被大多数人忽视的领域。那时的网页设计简陋&#xff0c;功能单一&#xff0c;前端开发的工作也相对简单。然而&#xff0c;随着科技的发展和互联网的普及&#xff0c;前端开发已经从一个边缘角色成长为一个关键的创新驱动力。那么&#xf…

6.1810: Operating System Engineering 2023 <Lab3: page tables>

一、本节任务 实验环境&#xff1a; 二、要点 如何防止程序破坏内核或其他进程空间&#xff1f;隔离地址空间&#xff0c;进程只能读写自己的内存空间。 在保证隔离的同时&#xff0c;如何将多个地址空间复用到一个物理内存上&#xff1f;虚拟内存/页表。操作系统通过页表来为…

Bert4keras相关环境安装

1. 创建虚拟环境&#xff0c;先安装cudatoolkit和cudnn cudatoolkit版本不对容易报so库找不到的错。 具体安装参考&#xff1a;在conda虚拟环境中安装cuda和cudnn&#xff0c;解决pip install or python setup.py install 将安装包安装到全局环境中的问题&#xff08;1.2部分&…

有源功率因数校正电路的设计(论文+仿真)

1. 系统设计 本文围绕有源功率因数校正电路的设计而展开&#xff0c;拟以BOOST的拓扑结构进行有源功率因数校正电路的搭建&#xff0c;通过不同电流模式的Boost变换电路实际应用及其分析&#xff0c;能够总结最优的解决设计方案&#xff0c;在方案建立的基础之上&#xff0c;通…

企业数字档案馆室建设指南

数字化时代&#xff0c;企业数字化转型已经成为当下各行业发展的必然趋势。企业数字化转型不仅仅是IT系统的升级&#xff0c;也包括企业内部各种文件、档案、合同等信息的数字化管理。因此&#xff0c;建设数字档案馆室也变得尤为重要。本篇文章将为您介绍企业数字档案馆室建设…

华为鸿蒙爆发真实力!原生应用媲美iOS,使用流畅度将提升20至30%

随着华为鸿蒙原生应用开发计划的启动&#xff0c;一场席卷全球的科技浪潮正在涌动。鸿蒙生态的快速发展&#xff0c;吸引了无数企业和开发者的关注&#xff0c;他们纷纷拥抱这个新兴的生态系统&#xff0c;共同构建一个更加繁荣的鸿蒙世界。 华为鸿蒙原生应用开发计划引爆全球…

【计算机二级MS Office】word(上)

这里写目录标题 文件选项卡保存和另存为属性检查文档 开始选项卡字体更改字体和字号设置中文和英文为两种不同字体的快捷方式介绍其余图标文本效果突出颜色如何挑选字体颜色字符底纹带圈字符字体对话框&#xff08;隐藏&#xff09; 段落 插入选项卡设计选项卡布局选项卡引用选…

Ribbon 饥饿加载

Ribbon默认是采用懒加载&#xff0c;即第一次访问时才会去创建LoadBalanceClient&#xff0c;请求时间会很长而饥饿加载则会在项目启动时创建&#xff0c;降低第一次访问的耗时&#xff0c;通过下面配置开启饥饿加载: 一、懒加载 Ribbon 默认为懒加载即在首次启动Application…

妈妈和老婆掉进水里,孟子认为先救老婆是禽兽

妈妈和老婆同时掉进水里先救谁&#xff1f; 多数男人不敢回答&#xff0c;怕得罪老婆。孟子认为&#xff0c;必须先救妈妈。因为父母都照顾不好&#xff0c;是不孝。先救妈妈&#xff0c;再救老婆。 中国人的信仰是天&#xff0c;以及孔孟之道。中国人不信宗教。 孟子&#x…

mysql锁介绍

锁分类&#xff1a; 加锁时机 普通select 语句会加MDL读锁&#xff0c;防止DDL的MDL写锁产生冲突 update、insert、delete会自动加入排它锁X&#xff0c;以及意向IX锁 select ... lock in share mode 加意向IS锁以及共享S锁 select... for update 加意向IX锁以及排它锁X

数据结构(超详细讲解!!)第二十六节 图(下)

1.无向图的连通分量 图遍历时&#xff0c;对于连通图&#xff0c;无论是广度优先搜索还是深度优先搜索&#xff0c;仅需要调用一次搜索过程&#xff0c;即从任一个顶点出发&#xff0c;便可以遍历图中的各个顶点。对于非连通图&#xff0c;则需要多次调用搜索过程&#xff0c;而…

二叉平衡树

一直想深入的研究一下&#xff0c;并手写平衡二叉树的插入、删除代码。 二叉树是动态查找的典范&#xff0c;但在极限情况下&#xff0c;二叉树的查找效果等同于链表&#xff0c;而平衡二叉树可以完美的达到 log ⁡ 2 n \log_2 n log2​n。 AVL简称平衡二叉树&#xff0c;缩写…

[Mac软件]HitPaw Photo Object Remover Mac v1.2.1 Ai智能去水印工具图像物体移除

多亏了HitPaw Photo Object Remover&#xff0c;它会自动跟踪和识别对象&#xff0c;并帮助您通过几个简单的步骤从照片中删除您想要的所有内容。 使用人工智能删除照片中物体的一流工具 •像1-2-3一样轻松地从照片中删除对象 •人工智能技术有助于立即清除不必要的物体 •轻…

激光雷达生成的图像检测关键点用来辅助里程计的方案

文章&#xff1a;LiDAR-Generated Images Derived Keypoints Assisted Point Cloud Registration Scheme in Odometry Estimation 作者&#xff1a;Haizhou Zhang , Xianjia Yu, Sier Ha , Tomi Westerlund 编辑&#xff1a;点云PCL 欢迎各位加入知识星球&#xff0c;获取PDF…

springboot 整合 Spring Security+JWT 实现token 认证和校验

1.大概是这个样子 JWT 是什么&#xff1f; Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准&#xff08;(RFC 7519).该token被设计为紧凑且安全的&#xff0c;特别适用于分布式站点的单点登录&#xff08;SSO&#xff09;场景。JWT的声明…

有源滤波器在矿区配电网中的应用

针对目前有源滤波器应用于矿区谐波治理时电网频率适应能力较低的问题&#xff0c;针对定采样点数字控制系统提出了一种具有频率自适应能力的谐振控制策略。该策略不仅可以实现对电网频率波动的自适应&#xff0c;提高滤波器补偿效果&#xff0c;而且不需要在线对控制器参数进行…

Apipost版IDEA插件

Apipost-Helper是由Apipost推出的IDEA插件&#xff0c;写完接口可以进行快速调试&#xff0c;且支持搜索接口、根据method跳转接口&#xff0c;还支持生成标准的API文档&#xff0c;注意&#xff1a;这些操作都可以在代码编辑器内独立完成&#xff0c;非常好用&#xff01;这里…