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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP入门软件Wampserver与vscode

PHP入门软件Wampserver与vscode Wampserver 一个集成的PHP环境&#xff0c;非常好用&#xff0c;上链接官网&#xff1a;https://www.wampserver.com/#download-wrapper 推荐华军https://www.onlinedown.net/soft/82112.htm 无脑下一步就行&#xff0c;会出现两个弹窗全点否。…

OMSA无法打开无法显示等服务异常时如何处理

文章目录 为何需要重启OMSAWindows 重启OMSA服务Linux 重启OMSA服务VMware 环境重启OMSA服务重启无效的解决办法推荐阅读 为何需要重启OMSA 在安装 OMSA 的服务器中&#xff0c;OMSA 管理软件运行可能会不稳定。例如&#xff1a; 某些信息&#xff08;如存储信息&#xff09;…

Redis quicklist源码+listpack源码(6.0+以上版本)

ziplist设计上的问题&#xff0c;每一次增删改都需要计算前面元素的空间和长度&#xff08;prevlen&#xff09;&#xff0c;这种设计缺陷非常明显&#xff0c;一旦其中一个entry发生修改&#xff0c;以这个entry后面开始&#xff0c;全部需要重新计算prevlen&#xff0c;因此诞…

nodejs+vue+微信小程序+python+PHP新闻发布系统的设计与实现-计算机毕业设计推荐

根据现实需要&#xff0c;此系统我们设计出一下功能&#xff0c;主要有以下功能模板。 &#xff08;1&#xff09;新闻发布系统前台&#xff1a;首页、时事新闻、公告资讯、个人中心。 &#xff08;2&#xff09;管理员功能&#xff1a;首页、个人中心、用户管理、新闻分类管理…

Open3D 进阶(19)间接平差法拟合平面

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 见:PCL 间接平差法拟合平面 二、代码实现 import numpy as np import open3d

24:kotlin 类和对象 -- 对象表达式和声明(Object expressions and declarations)

如果需要创建一个稍微修改了某个类的对象&#xff0c;而不需要显式地声明一个新的子类。Kotlin可以通过对象表达式&#xff08;object expressions&#xff09;和对象声明&#xff08;object declarations&#xff09;来处理这种情况。 对象表达式 对象表达式用于创建匿名类的…

中国移动频段划分

1、900MHz&#xff08;Band8&#xff09;上行&#xff1a;889-904MHz&#xff0c;下行&#xff1a;934-949MHz&#xff0c;带宽共计15MHz&#xff0c;目前部署&#xff1a;2G/NB-IoT/4G 2、1800MHz&#xff08;Band3&#xff09;上行&#xff1a;1710-1735MHz&#xff0c;下行…

kyuubi整合flink yarn application model

目录 概述配置flink 配置kyuubi 配置kyuubi-defaults.confkyuubi-env.shhive 验证启动kyuubibeeline 连接使用hive catalogsql测试 结束 概述 flink 版本 1.17.1、kyuubi 1.8.0、hive 3.1.3、paimon 0.5 整合过程中&#xff0c;需要注意对应的版本。 注意以上版本 姊妹篇 k…

机器学习之蛙跳算法(Jumping Frog Optimization,JFO)

概念 蛙跳算法(Jumping Frog Optimization,JFO)是一种基于仿生学和自然界觅食行为的启发式优化算法。该算法模拟了青蛙在寻找食物时的跳跃行为。青蛙通过一系列跳跃来寻找最优位置,而这些跳跃的长度和方向是通过计算当前位置的适应度值来确定的。 蛙跳算法的基本步骤: …

AXURE地图获取方法

AXURE地图截取地址 https://axhub.im/maps/ 1、点击上方地图或筛选所需地区的地图&#xff0c;点击复制到 Axure 按钮&#xff0c;到 Axure 粘贴就可以了 2、复制到 Axure 后&#xff0c;转化为 svg 图形&#xff0c;就可以随意更改尺寸/颜色/边框&#xff0c;具体操作如下&am…

微型5G网关如何满足智能巡检机器人应用

在规模庞大、设施复杂的炼化厂、钢铁厂、工业园区等大型、巨型区域&#xff0c;时刻需要对各类设施设备巡查监测&#xff0c;保障生产运行安全可控。传统的人工巡检存在着心态松懈、工作低效、工作强度高、工作环境恶劣等问题&#xff0c;仍然存在安全隐患。 而随着物联网、5G、…

【Flink on k8s】- 6 - Flink 核心特性

目录 1、系统架构 1.1 Flink api 抽象 1.2 数据流图 1.1.1、流式计算引擎逻辑视角与物理视角

稀疏矩阵的操作(数据结构实训)

题目&#xff1a; 标准输入输出 题目描述&#xff1a; 稀疏矩阵可以采用三元组存储。 输入&#xff1a; 输入包含若干个测试用例&#xff0c;每个测试用例的第一行为两个正整数m,n(1<m,n<100),表示矩阵的行数和列数,接下来m行&#xff0c;每行n个整数&#xff0c;表示稀疏…

[NEO解题报告]《Leetcode》1423. 可获得的最大点数 - Rust/C++

文章目录 思路解题方法复杂度CodeRust代码rust 用例 C 代码 Problem: 1423. 可获得的最大点数 思路 两种算法都可以&#xff1a; 方法1&#xff1a; 直接计算&#xff0c; 首尾各自往中间记录两个前缀和&#xff0c; 然后单次遍历 从前面取i个和后面取 k-i 个的和&#xff0c; …

Linux设备树

一、起源 减少垃圾代码 减轻驱动开发工作量 驱动代码和设备信息分离 参考Open Fireware设计 用来记录硬件平台中各种硬件设备的属性信息 二、基本组成 两种源文件&#xff1a; xxxxx.dts dts是device tree source的缩写xxxxx.dtsi dtsi是device tree source include的缩…

HarmonyOS4.0从零开始的开发教程08构建列表页面

HarmonyOS&#xff08;六&#xff09;构建列表页面 List组件和Grid组件的使用 简介 在我们常用的手机应用中&#xff0c;经常会见到一些数据列表&#xff0c;如设置页面、通讯录、商品列表等。下图中两个页面都包含列表&#xff0c;“首页”页面中包含两个网格布局&#xff…

鸿蒙HarmonyOS4.0开发应用学习笔记

黑马程序员鸿蒙4.0视频学习笔记&#xff0c;供自己回顾使用。1.安装开发工具DevEco Studio 鸿蒙harmony开发文档指南 DevEco Studio下载地址 选择或者安装环境 选择和下载SDK 安装总览 编辑器界面 2.TypeScript语法 2.1变量声明 //string 、number、boolean、any、u…

清理oracle库30亿的表后,释放删除空间

1.创建中间表 请以HADES_COD.HDS_COD_BUSI_DETAIL为模板&#xff0c; 手动创建中间表&#xff1a;HADES_COD.HDS_COD_BUSI_DETAIL_1 以及它的constraint约束 示例&#xff1a; -- Create table create table HADES_COD.HDS_COD_BUSI_DETAIL_1 ( id …

HarmonyOS学习--初次下载安装和配置环境

一、Windows下载与安装软件 运行环境要求&#xff1a; 为保证DevEco Studio正常运行&#xff0c;建议电脑配置满足如下要求&#xff1a; 操作系统&#xff1a;Windows10 64位、Windows11 64位内存&#xff1a;8GB及以上硬盘&#xff1a;100GB及以上分辨率&#xff1a;1280*80…

鼎捷受邀出席“中国制造业产品创新数字化国际峰会”,共话工业软件创新发展

11月30日&#xff0c; 由e-works数字化企业网、四川省智能制造创新中心、重庆制信信息技术服务有限公司主办的第十九届中国制造业产品创新数字化国际峰会在四川成都盛大开幕。 作为制造业研发信息化领域规模、影响力兼具的专业论坛&#xff0c;本届峰会以“构建基于数字底座的…