C++类的组合
C++类的组合
- 什么是类的组合
- 初始化参数列表
- 使用
- 类的组合案例分析
- 组合构造和析构顺序问题
- this指针
- 基本用法和作用
什么是类的组合
类的组合就是以另一个对象为数据成员,这种情况称为类的组合
1.优先使用类的组合,而不是继承
2.组合表达式的含义 一部分关系
初始化参数列表
初始化参数列表,是构造函数的另一种写法
使用
初始化参数列表的形态
构造函数名(形参1, 形参2…) : 数据成员1(形参1), 数据成员2(形参2)…
#include<iostream>
#include<string>using namespace std;class MM
{
public:MM(int age, string name) : age(age), name(name){}void printDate(){cout << age << " " << name;}private:int age;string name;
};int main()
{MM mm(19, "温柔了岁月");mm.printDate();system("pause");return 0;
}
初始化列表的其他写法
无参构造函数
#include<iostream>
#include<string>using namespace std;class MM
{
public://无参构造函数MM() : age(18), name("温柔了岁月"){}void printDate(){cout << age << " " << name;}private:int age;string name;
};int main()
{MM mm;mm.printDate();system("pause");
类的组合案例分析
1.类组合包含的类的对象,必须采用初始化参数列表的方式去初始化
2.组合中初始化参数列表的写法:
构造函数名(形参1, 形参2, 形参3,…) : 对象1(形参1, 形参2), 对象2(形参3,…)
//组合类
#include<iostream>
#include<string>using namespace std;class MM1
{
public:MM1(){cout << "MM1号" << endl;}private:int age;string name;};class MM2
{
public:MM2(){cout << "MM3号" << endl;}private:int age;string name;};class MM3
{
public:MM3(){cout << "MM3号" << endl;}private:int age;string name;
};class MM
{void show(){}
private: //其他三个类,都放在一个类中,当做一个数据类型进行使用 MM1 mm1; MM2 mm2;MM3 mm3;
};
int main()
{MM mm;system("pause");return 0;
}

这是一个简单的类的组合,没有进行传参,
类的组合中,优先构造包含对象,再构造自身的对象
下面是传了形参的组合类
#include<iostream>
#include<string>using namespace std;class MM1
{
public:MM1(int age, string name){cout << "MM1号" << endl;}void printDate(){cout << "MM3号" << endl;}private:int age;string name;};class MM2
{
public:MM2(int age, string name){cout << "MM3号" << endl;}void printDate(){cout << "MM3号" << endl;}
private:int age;string name;};class MM3
{
public:MM3(int age, string name){cout << "MM3号" << endl;}void printDate(){cout << "MM3号" << endl;}private:int age;string name;
};class MM
{
public:MM(int x1,string y1, int x2, string y2, int x3, string y3): mm1(x1, y1), mm2(x2, y2),mm3(x3, y3){}void Print(){mm1.printDate();mm2.printDate();mm3.printDate();}MM1 getmm1()//访问数据成员{return mm1;}MM2 getMM2(){return mm2;}MM3 getMM3(){return mm3;}private: //构造顺序与此处有关,与初始化列表的顺序无关MM1 mm1;MM2 mm2;MM3 mm3;
};
int main()
{MM mm(1, "温柔", 2, "了", 3, "岁月");mm.Print();//mm.getmm1().printDate();//可以这样写system("pause");return 0;
}
指针的运用(new)
#include<iostream>using namespace std;class A
{public:A(int a) : a(a){}int& getA(){return a;}
private:int a;
};class B
{
public:B(int b): b(b){}int& getB(){return b;}
private:int b;
};class C
{
public:C(){pa = new A(10); //方法一:直接赋值pb = new B(123);}C(int a, int b) :pa(new A(10)), pb(new B(12)) //方法二,new的初始化列表{}void printDate(){cout << pa->getA() << endl;cout << pb->getB() << endl;}private:A* pa;B* pb;
};int main()
{C c;c.printDate();system("pause");return 0;
}
组合构造和析构顺序问题
1.一般构造顺序和析构顺序是相反的
2.类的组合中,优先构造包含对象,在构造自身对象
3.类的组合中,包含对象的构造顺序只和定义顺序有关,和初始化参数列表无关
this指针
任何指针都存在一个this指针,this指针只允许在类中的函数的函数中使用
避免形参名和数据成员的命名相同
基本用法和作用
this指针代表的是每个对象抽象的地址
#include<iostream>
#include<string>using namespace std;class MM
{
public:MM(int age, string name){this->age = age; //可以用this指针来进行区分MM::name = name; // 类加作用域,来进行区分}
private:int age;string name;
};
int main()
{system("pause");
}
其他作用
1.返回对象本身
2.返回对象地址
MM& returnMM() //返回对象本身{return *this;}MM* returnM(){return this; //返回对象地址}
相关文章:
C++类的组合
C类的组合什么是类的组合初始化参数列表使用类的组合案例分析组合构造和析构顺序问题this指针基本用法和作用什么是类的组合 类的组合就是以另一个对象为数据成员,这种情况称为类的组合 1.优先使用类的组合,而不是继承 2.组合表达式的含义 一部分关系 初…...
2.伪随机数生成器(ctr_drbg)的配置与使用
零、随机数应用 生成盐,用于基于口令的密码 生成密钥,用于加密和认证 生成一次性整数Nonce,防止重放攻击 生成初始化向量IV 构成 种子,真随机数生成器的种子来源于物理现象 内部状态,种子用来初始化内部状态 一、真随机数和伪随机数 1.区别 随机数在安全技术中通常被用于…...
CentOS7 切换图形模式和多用户命令行模式
备注: 主机名 hw 含义:hardware 缩写,意思是硬件(物理机) 文章目录1、查看源头2、查看当前系统运行模式3、设置系统运行模式为多用户命令行模式4、查看当前系统运行模式5、重启系统6、确认当前系统运行模式7、设置系统…...
在linux上用SDKMan对Java进行多版本管理
在linux上用SDKMan对Java进行多版本管理 有一个工具叫SDKMan,它允许我们这样做。官方网站这样描述: TIP: "SDKMan 是一个工具,用于在大多数基于Unix的系统上管理多个软件开发工具包的并行版本。它提供了一个方便的命令行接口(CLI)和API,…...
JSONObject、fastJson(JsonObject)、Gson(JsonObject)区别
概述 Java中并没有内置的 JSON 解析,需要使用第三方类库 fastJson :阿里巴巴的JSON 库,优势在于解析速度快,解析效率高,可以轻松处理大量的 JSON 数据JackSon : 社区十分活跃,spring框架默认使…...
如何在CSDN中使用ChatGPT
本篇文章致力于帮助大家理解和使用ChatGPT(现在CSDN改成”C知道“了)。简介ChatGPT是OpenAI公司开发的一种大型语言模型。它是一种基于Transformer架构的深度学习模型,可以对语言进行建模和生成。它可以处理问答、对话生成、文本生成等多种任…...
【Spring6】| GoF之工厂模式
目录 一:GoF之工厂模式 1. 工厂模式的三种形态 2. 简单工厂模式 3. 工厂方法模式 4. 抽象工厂模式(了解) 一:GoF之工厂模式 (1)GoF(Gang of Four),中文名——四人组…...
初识Node.js
文章目录初识Node.jsNode.js简介fs模块演示路径问题path路径模块http模块创建web服务器得基本步骤req请求对象res响应对象解决中文乱码问题模块化的基本慨念1、模块化2、Node.js中模块的分类3、Node.js中的模块作用域3.1什么是模块作用域4、向外共享模块作用域中的成员4.1modul…...
C51---软件消抖
1.example #include "reg52.h" #include "intrins.h" //main.c(11): error C264: intrinsic _nop_: declaration/activation error,添加这个头文件就可了 sbit led1 P3^7;//引脚位置,根据原理图可知 sbit key1 P2^1; sbit key2 P2^0; void …...
redis数据持久化
redis备份概念 Redis所有数据都是保存在内存中,Redis数据备份可以定期的通过异步方式保存到磁盘上,该方式称为半持久化模式,如果每一次数据变化都写入aof文件里面,则称为全持久化模式。同时还可以基于Redis主从复制实现Redis备份…...
Java StringBuffer类
Java StringBuffer类是Java语言中一个非常重要的类,它提供了丰富的方法,可以方便地进行字符串操作。本文将详细介绍Java StringBuffer类的作用以及在实际工作中的用途。 StringBuffer类的作用 Java StringBuffer类是一个可变的字符串缓冲区,…...
电路模型和电路定律(2)——“电路分析”
各位CSDN的uu们你们好呀,好久没有更新电路分析的文章啦,今天来小小复习一波,之前那篇博客,小雅兰更新了电路的历史以及电压电流的参考方向,这篇博客小雅兰继续!!! 电阻元件 电压源和…...
天琊超级进程监视器的应用试验(19)
实验目的 1、了解进程概念及其基本原理; 2、掌握天琊超级进程监视器的安装与使用。预备知识 本实验要求实验者具备如下的相关知识。 操作系统的安全配置是整个系统安全审计策略核心,其目的就是从系统根源构筑安全防护体系,通过用户的一…...
使用 Pulumi 打造自己的多云管理平台
前言在公有云技术与产品飞速发展的时代,业务对于其自身的可用性提出了越来越高的要求,当跨区域容灾已经无法满足业务需求的情况下,我们通常会考虑多云部署我们的业务平台,以规避更大规模的风险。但在多云平台部署的架构下…...
什么是MyBatis?无论是基础教学还是技术精进,你都应该看这篇MyBatis
文章目录学习之前,跟你们说点事情,有助于你能快速看完文章一、先应用再学习,代码示例1. 第一个MyBatis程序2. MyBatis整合Spring3. SpringBoot整合MyBatis二、MyBatis整体流程,各组件的作用域和生命周期三、说说MyBatis-config.xm…...
【编程基础之Python】10、Python中的运算符
【编程基础之Python】10、Python中的运算符Python中的运算符算术运算符赋值运算符比较运算符逻辑运算符位运算符成员运算符身份运算符运算符优先级运算符总结Python中的运算符 Python是一门非常流行的编程语言,它支持各种运算符来执行各种操作。这篇文章将详细介绍…...
Android的基础介绍
一、Android介绍 Android是一种基于Linux的自由及开放源代码的操作系统,Android 分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux内核层。 Android 是Google开发的基于Linux平台的开源手机操作系统。它包括操作系统、用户界面和应用程序——…...
用户登录请求100w/每天, JVM如何调优
用户登录请求100w/每天, JVM如何调优 大概可以分为以下8个步骤。 Step1:新系统上线如何规划容量? 1.套路总结 任何新的业务系统在上线以前都需要去估算服务器配置和JVM的内存参数,这个容量与资源规划并不仅仅是系统架构师的随意估算的&am…...
C/C++每日一练(20230306)
目录 1. 判断素数的个数 ☆ 2. 分隔链表 ★★ 3. 数据流的中位数 ★★ 1. 判断素数的个数 在一个数组A中存放100个数据,用子函数判断该数组中哪些是素数,并统计该素数的个数,在主函数中输出该素数的个数。 代码: #includ…...
多线程的创建、Thread类、线程安全、同步、通信
目录 多线程的创建 方式一:继承Thread类 方式二:实现Runnable接口 方式三:JDK 5.0新增:实现Callable接口 Thread的常用方法 线程安全 线程安全问题是什么、发生的原因 线程安全问题案例模拟 线程同步 同步思想概述 方式…...
革新性跨系统应用运行方案:APK Installer实现Windows原生Android应用体验
革新性跨系统应用运行方案:APK Installer实现Windows原生Android应用体验 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 当您急需在Windows电脑上运行某个…...
我的世界Waterfall跨服配置避坑指南:从‘连接被拒绝’到流畅穿梭的完整排错流程
我的世界Waterfall跨服配置避坑指南:从‘连接被拒绝’到流畅穿梭的完整排错流程 当你兴奋地搭建好Waterfall跨服架构,却在测试时遭遇"连接被拒绝"的红色提示,或是玩家卡在大厅无法切换子服时,那种挫败感我深有体会。本文…...
从Java转行大模型应用,Advanced-RAG 学习
一、RAG 进阶概述(Advanced-RAG)基础RAG(检索增强生成)核心是“检索生成”的两阶段流程,解决大模型“幻觉”和知识时效性问题,但在复杂场景(长文档、模糊查询、高精准需求)中存在检索…...
KittenTTS终极指南:如何在CPU上实现25MB轻量级TTS语音合成
KittenTTS终极指南:如何在CPU上实现25MB轻量级TTS语音合成 【免费下载链接】KittenTTS State-of-the-art TTS model under 25MB 😻 项目地址: https://gitcode.com/gh_mirrors/ki/KittenTTS KittenTTS是一款革命性的轻量级文本转语音工具&#…...
USB批量传输中ZLP的必要性:为何512字节整数倍数据包会丢失
1. USB批量传输中的ZLP到底是什么? 第一次遇到USB批量传输丢数据的问题时,我也是一头雾水。明明发送端显示数据已经成功发送,接收端却死活收不到完整数据。后来排查发现,问题出在数据包大小刚好是512字节的整数倍时。这就是我们今…...
Rockchip Android 12编译踩坑记:手把手教你修改BoardConfig.mk生成userdata.img
Rockchip Android 12编译实战:从BoardConfig.mk修改到userdata.img生成的避坑指南 第一次在Rockchip平台上编译Android 12系统时,我遇到了一个令人抓狂的问题——编译过程看似顺利,但生成的固件烧写到设备后,系统始终无法正常启动…...
Musicdl革新性全场景音乐解决方案:5个维度揭秘开源音乐下载技术的破局之道
Musicdl革新性全场景音乐解决方案:5个维度揭秘开源音乐下载技术的破局之道 【免费下载链接】musicdl Musicdl: A lightweight music downloader written in pure python. 项目地址: https://gitcode.com/gh_mirrors/mu/musicdl 在数字音乐产业蓬勃发展的今天…...
别再只盯着运放了:用跨阻放大器搞定光电传感器信号调理的完整指南
光电传感器信号调理实战:跨阻放大器设计与避坑指南 当你在昏暗的灯光下测试光电传感器时,是否曾被微弱的电流信号折磨得焦头烂额?作为嵌入式工程师,我曾在凌晨三点的实验室里,面对闪烁不定的示波器波形,才…...
APIFox签名生成实战:从环境变量配置到MD5签名一键搞定
APIFox签名生成实战:从环境变量配置到MD5签名一键搞定 在接口开发与测试过程中,签名机制是保障接口安全性的重要手段。APIFox作为一款强大的API协作平台,提供了灵活的脚本功能,能够帮助开发者快速实现签名生成与自动化测试。本文将…...
从“玩概念”到“真落地”:AI智能体三大场景的突围之路
当行业不再为“大模型参数”狂欢,真正的价值开始浮现——客服自动化、内部知识库、办公Agent,正在成为AI智能体最先跑通商业闭环的三大场景。而决定成败的关键,已经从模型能力转向上下文设计、工具调用与反馈迭代。 2026年,大模型…...
