当前位置: 首页 > news >正文

C++:聚合类、嵌套类、局部类、union类详细介绍与分析

聚合类

(1)What(什么是聚合类)

本质是一个自定义类型的数据结构(结构体或类),但聚合类有以下特性:

  • 所有的成员都是public
  • 没有任何构造函数
  • 没有基类
  • 类内部没有初始值

(2)Why(聚合类的作用)

主要目的是提供一种简单且高效的方式来组织和管理数据。它们通常用于表示简单的 数据结构,如结构体或记录类型,而不涉及复杂的行为和操作

(3)How(如何定义和使用聚合类)

struct Point{double dx;double dy;
};
Point pt01 = {1.1, 2.2};
Point pt02{3.3, 4.4};

嵌套类

(1)What(什么是嵌套类)

定义或声明在类内部的类,它可以访问外部类的私有成员,并能在外部类作用域内使用

(2)Why (嵌套类的作用)

封装和隐藏:将嵌套类进行私有化,实现封装和隐藏
组织和结构化:将一个类嵌套到另一个类,可以清晰的表达两个类之间的关系
实现设计模式:如工厂模式、建造者模式等
命名空间嵌套:有助于避免命名空间冲突

(3)How(如何使用嵌套类)

class Student 
{
private:string name;int age;
...
}
class Grade
{
private:Student student; //Student在类Grade中声明,Student属于类Grade的嵌套类
...
}

局部类

(1)What(什么是局部类)

定义在函数内部或代码块中的类被称为局部类,它的作用域是该函数内部或代码块中

局部类具有以下特性:

  • 不允许存在静态的成员
  • 只允许访问外层作用域的静态变量、枚举和类型名
  • 可以访问全局变量(使用:: ):😃

(2)Why(局部类的作用)

  • 封装:隐藏细节
  • 避免命名冲突:由于只对作用域可见,有助于避免命名冲突,提供更好的隔离性
  • 增加代码的可维护性

union类

(1)What(什么是union类)

本质是一种类,这种类有以下特点:union类可以包含多个成员,但同一时刻只能使用其中一个成员,当其中一个成员被赋值时,其它成员就会变成未定义的状态

(2)Why(union类的作用)

节省内存:当需要存储多种内存数据,但是每次只使用其中一种时
灵活处理异构数据:提供了一种灵活的数据结构,在无需定义多个变量或复杂数据结构的情况下存储和操作不同类型的数据

(3)How(如何使用union类)

struct Rectangle{ float height; float width; }; 
struct Circle { float radius; };
// 定义 union 类 
union Shape {Rectangle rect; Circle circle;
};
float calculateArea(const Shape &shape, string mode) 
{ if (mode == "circle") return 3.1415926 * shape.circle.radius * shape.circle.radius; if (mode == "rect")  return shape.rect.width * shape.rect.height;return 0;
}
// 创建 union 对象 Shape shape;
string mode = "circle"; 
shape.circle.radius = 5;
cout << shape.rect.width << "," << shape.rect.height << endl; //此处会报错
std::cout << "圆的面积:" << calculateArea(shape, mode) << std::endl; // 打印:78.5398 
mode = "rect";
shape.rect.height = 4; 
shape.rect.width = 6;
std::cout << "矩形的面积:" << calculateArea(shape, mode) << std::endl; // 打印:24

(4)匿名的union类

A.What(什么是匿名的union类)

本质:一个union类,它具有以下特性

  • 一旦定义了匿名的union类,编译器就会为它创建一个未命名的对象
  • 作用域内能够访问大匿名union类的所有成员
  • 匿名的union类中的成员必须是public的
  • 匿名的union类中不能定义成员函数,只能作纯数据的结构体使用

B.How(如何使用union类)

class UnionBaseType
{
private: enum {INT, DOUBLE, CHAR, STRING } tp; // 通过匿名枚举类型定义一个变量 tp union {int ival; double dval; string sval; }; // 外层作用域可直接访问匿名 union 中的成员 
public:// 默认构造函数 UnionBaseType() : tp(INT), ival(0) {} // 拷贝构造函数UnionBaseType(const UnionBaseType &obj){tp = obj.tp; copyUnion(obj);}~UnionBaseType(){if (tp == STRING) sval.~string(); }void copyUnion(const UnionBaseType &obj){switch (obj.tp){case UnionBaseType::INT: ival = obj.ival; break; case UnionBaseType::DOUBLE: dval = obj.dval; break; case UnionBaseType::STRING: new (&sval) string(obj.sval); break;// 实现对对象的拷贝 default: break;} // 对 int 成员进行赋值 UnionBaseType &operator=(int ival_) {if (tp == STRING) sval.~string(); tp = UnionBaseType::INT; ival = ival_; return *this;}// 对 double 成员进行赋值 UnionBaseType &operator=(double dval_) {if (tp == STRING) sval.~string();tp = UnionBaseType::DOUBLE; dval = dval_; return *this;}// 对 string 成员进行赋值 UnionBaseType &operator=(const string &sval_) {if (tp == STRING) sval = sval_;else new (&sval) string(sval_); tp = UnionBaseType::STRING; return *this;}// 展示信息 void show() const{if (tp == INT) cout << ival << endl; if (tp == DOUBLE) cout << dval << endl; if (tp == CHAR) cout << cval << endl; if (tp == STRING) cout << sval << endl;}
}

================================================================================

C++知识点总结全系列文章索引:
【C++知识点总结全系列 (01)】:数据类型、数据类型转换和变量
【C++知识点总结全系列 (02)】:C++中的语句、运算符和表达式详细总结
【C++知识点总结全系列 (03)】:函数(函数参数传递、可变参数、函数返回值等详细介绍)
【C++知识点总结全系列 (04)】:C++类的详细总结与分析
【C++知识点总结全系列 (05)】:IO 类的详细总结和分析
【C++知识点总结全系列 (06)】:STL六大组件详细总结与分析- 配置器、容器、迭代器、适配器、算法和仿函数

【C++知识点总结全系列 (07)】:模板与泛型编程详细总结与分析
【C++知识点总结全系列 (08)】:面向对象编程OOP

相关文章:

C++:聚合类、嵌套类、局部类、union类详细介绍与分析

聚合类 (1)What&#xff08;什么是聚合类&#xff09; 本质是一个自定义类型的数据结构&#xff08;结构体或类&#xff09;&#xff0c;但聚合类有以下特性&#xff1a; 所有的成员都是public没有任何构造函数没有基类类内部没有初始值 (2)Why&#xff08;聚合类的作用&…...

MKS流量计软件MFC通讯驱动使用于C和P系列MFC控制USB接口W10系统

MKS流量计软件MFC通讯驱动使用于C和P系列MFC控制USB接口W10系统...

C++:左值/右值引用、移动语义/std::move、万能引用/完美转发std::forward 详解

你能学到 左值 与 右值左值引用 与 右值引用 基本用法与作用拷贝构造函数 与 移动构造函数移动语义 与 std::move万能引用 与 引用折叠完美转发&#xff1a;std::forward 前言 本文代码片段中变量命名规则如下&#xff1a; 小写字母&#xff1a;一般类型的变量&#xff08;非…...

蜂窝物联云平台:一站式服务,智能生活从此开始!

蜂窝云平台 一、PC端展示与管理 GIS地图整合 在GIS地图上精确展示地块&#xff0c;轻松点选查看详细设备信息、实时监控和控制功能&#xff0c;以及基地的全方位介绍。 个性化定制界面 界面布局与功能展示均可按需求定制&#xff0c;打造独一无二的用户体验。 数据集中看板 将…...

【中项】系统集成项目管理工程师-第3章 信息技术服务-3.3服务生命周期

前言&#xff1a;系统集成项目管理工程师专业&#xff0c;现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试&#xff0c;全称为“全国计算机与软件专业技术资格&#xff08;水平&#xff09;考试”&…...

【iOS】——消息传递底层实现

消息传递是什么 Objective-C是一种动态类型语言&#xff0c;这意味着在编译时并不确定对象的具体类型&#xff0c;而是在运行时决定。消息传递机制允许程序在运行时向对象发送消息&#xff0c;对象再决定如何响应这些消息。 当你通过对象调用方法时&#xff0c;例如像这样[ob…...

PostgreSQL数据库从入门到精通系列之十:表空间、索引表空间、创建表空间、创建索引空间、创建分区表、创建分区表的分区、创建指定表空间、索引表空间的分区表

PostgreSQL数据库从入门到精通系列之十:表空间、索引表空间、创建表空间、创建索引空间、创建分区表、创建分区表的分区、创建指定表空间、索引表空间的分区表 一、数据库表空间和数据库之间的关系二、索引表空间和数据库之间的关系三、创建角色四、创建表空间目录五、创建表空…...

恶补,先验分布,后验分布 ,似然估计

恶补&#xff0c;打一遍增加印象 先验分布后验分布&#xff0c;似然估计 声明&#xff1a;仅记录个人学习&#xff0c;并无其他用途。 先验分布 后验分布&#xff0c; 似然估计 隔壁小哥的故事&#xff1a; 隔壁小哥要去15公里外的一个公园里玩&#xff0c;小哥可以选择步行…...

JS之数组中的reduce方法

文章目录 基本语法&#xff1a;callbackFn 的参数:例子1. 数组求和2. 数组求积3. 扁平化数组4. 数组元素计数5. 使用对象解构和展开运算符合并数组中的对象6. 求最大值和最小值 函数组合异步操作中的 reduce总结 reduce 是 JavaScript 中 Array 对象的一个方法&#xff0c;非常…...

在win10上通过WSL和docker安装Ubuntu子系统,并配置Ubuntu可成功使用宿主机GPU

本文主要记录win10系统上,通过WSL的Ubuntu系统以及Docker使用GPU的全部过程。 文章目录 1、 启用hyper-v2、 安装docker3、 安装WSL3.1 安装WSL23.1.1 检查是否安装了WSL23.1.1 安装和配置 WSL 23.2 安装Ubuntu 子系统3.3 检查并修改WSL版本4、docker配置ubuntu20.04 LTS5、下…...

python需要掌握那些语法

1-list数据类型 内置方法查看长度len&#xff08;list&#xff09; 2.array数据类型 查看形状 3.tuple 取出元组 t (1, 2, 3, 4, 5) # 取出第一个元素 2first_element t[0] 3print(first_element) # 输出&#xff1a;1 4 5# 取出第三个元素 6third_element t[2] 7pr…...

CentOS Mysql8 数据库安装

添加mysql yum仓库 这里安装的是8.0版本&#xff0c;如需其他版本在此查看mysql版本列表 wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm sudo rpm -Uvh mysql80-community-release-el7-3.noarch.rpm安装mysql sudo yum install mysql-server …...

新手教程---python-函数(新添加)

一、递归函数 在Python中&#xff0c;递归函数是指一个函数调用自身的过程。递归函数一般包括两个部分&#xff1a;基本情况和递归情况。 基本情况是指在递归过程中终止递归的条件。如果不满足基本情况&#xff0c;递归函数将进入递归情况&#xff0c;调用自身&#xff0c;并缩…...

Windows tasklist命令详解,Windows查看进程

「作者简介」&#xff1a;冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础著作 《网络安全自学教程》&#xff0c;适合基础薄弱的同学系统化的学习网络安全&#xff0c;用最短的时间掌握最核心的技术。 tasklist 可以…...

数据结构——线性表(循环链表)

一、循环链表定义 将单链表中终端结点的指针端由空指针改为指向头结点&#xff0c;就使整个单链表形成一 个环&#xff0c;这种头尾相接的单链表称为单循环链表&#xff0c;简称循环链表(circular linked list)。 循环链表解决了一个很麻烦的问题。如何从当中一 个结点出发&am…...

深度剖析机构号矩阵系统:如何根据业务需求做出明智选择

在数字化营销的浪潮中&#xff0c;短视频平台如抖音、快手等已成为品牌传播和用户互动的重要渠道。为了更高效地管理这些平台的账号&#xff0c;机构号矩阵系统应运而生。本文将深度剖析机构号矩阵系统&#xff0c;并探讨如何根据业务需求做出明智的选择。 机构号矩阵系统概述…...

go语言的基础语法

基础语法 与python、vue等类似&#xff0c;go语言也分常量和变量等&#xff0c;常量用const(不可变)和变量var(可变)定义 常量 常量中的数据类型只可以是布尔型、数字型&#xff08;整数型、浮点型和复数&#xff09;和字符串型&#xff0c;值不可更改&#xff0c;表达式只支…...

Modbus转Ethernet/IP网关模块与汇川PLC通讯案例

Modbus转Ethernet/IP网关模块&#xff08;XD-MDEP100&#xff09;是一种用于将Modbus协议转换为Ethernet/IP协议的设备。它可以将Modbus RTU和Modbus TCP两种不同格式的Modbus数据包转换为Ethernet/IP协议的数据包&#xff0c;实现不同厂家的设备之间的数据交换和共享。在汇川P…...

【玩转python】入门篇day11-位运算

1、位运算语法 计算机中所有的数据都是以二进制的形式存储在设备中。即 0、1 两种状态&#xff0c;计算机对二进制数据进行的运算(、-、、/)都是叫位运算&#xff0c;相比在代码中直接使用(、-、、/)运算符&#xff0c;合理的运用位运算更能显著提高代码在机器上的执行效率。 …...

【Gitlab】记一次升级 Gitlab 后 API 失效的问题

背景 前段时间&#xff0c;因内部使用的 Gitlab 版本存在漏洞&#xff0c;需要进行升级&#xff0c;于是乎&#xff0c;将 Gitlab 从 16.6.0 升级到 16.11.3。而我们项目有个接口是用于获取 Gitlab 上的开发人员。 然后&#xff0c;今天&#xff0c;突然发现这个接口获取不到…...

2024.7.19 作业

1.链表的排序 int list_sort(NodePtr L) {if(NULLL || L->len<1){printf("排序失败");return -1;}int lenL->len1;NodePtr p;int i,j;for( i1;i<len;i){for( j0,pL;j<len-i;j,pp->next){if( p->data > p->next->data ){datatype tp-&…...

python如何创建SQLite 数据库连接,如何将数据库存储在内存中?

嗨&#xff0c;大家好&#xff0c;我是兰若姐姐。今天给大家说下如何创建SQLite 数据库连接,并将数据库存储在内存中,这是一种临时的、私有的数据存储空间&#xff0c;一般用于以下情形&#xff1a; 什么都不说&#xff0c;先上代码&#xff1a; import sqlite3创建数据库连接…...

机器学习-20-基于交互式web应用框架streamlit的基础使用教程

参考简洁而优雅地展示你的算法和数据——streamlit教程(一) 原理介绍与布局控制 参考Streamlit 讲解专栏(二):搭建第一个应用 Streamlit 讲解专栏(三):两种方案构建多页面 Streamlit 讲解专栏(五):探索强大而灵活的 st.write() 函数 1 streamlit 1.1 运行原理 im…...

基于luckysheet实现在线电子表格和Excel在线预览

概述 本文基于luckysheet实现在线的电子表格&#xff0c;并基于luckyexcel实现excel文件的导入和在线预览。 效果 实现 1. luckysheet介绍 Luckysheet &#xff0c;一款纯前端类似excel的在线表格&#xff0c;功能强大、配置简单、完全开源。 官方文档在线Demo 2. 实现 …...

【学习笔记】无人机系统(UAS)的连接、识别和跟踪(一)-3GPP TS 23.256 技术规范概述

3GPP TS 23.256 技术规范&#xff0c;主要定义了3GPP系统对无人机&#xff08;UAV&#xff09;的连接性、身份识别、跟踪及A2X&#xff08;Aircraft-to-Everything&#xff09;服务的支持。 3GPP TS 23.256 技术规范&#xff1a; 以下是文档的核心内容总结&#xff1a; UAV系…...

sqlalchemy_dm

1、参考文档&#xff1a; https://blog.csdn.net/njcwwddcz/article/details/126554118 https://eco.dameng.com/document/dm/zh-cn/pm/dmpython-dialect-package.html 2、生成工具 sqlalchemy2.0.0.zip 3、安装步骤 conda create --name kes --clone kes1 rz unzip sql…...

基于springboot+vue+uniapp的驾校预约平台小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…...

echarts实现3d柱状效果

代码如下&#xff0c;单个的调第一个方法&#xff0c;多个柱状的调第二个方法&#xff0c;具体情况修改参数或者二次开发即可 //3d柱状图 export function getEcharts3DBar (xAxisData:string[][name1,name2,name3], data:number[][1,2,3], colorObj:IBaseObject{topStartColo…...

Flask校验

WTForms 是一个 Python 库&#xff0c;用于处理和验证 Web 表单。它提供了很多功能来简化表单处理&#xff0c;包括字段类型、验证器、错误消息等。在 WTForms 中&#xff0c;validate 机制是用于确保表单数据满足特定条件的关键部分。 1.验证器&#xff08;Validators&#x…...

web前端 Vue 框架面试120题(一)

面试题 1 . 简述Vue的MVVM 模式? 参考回答&#xff1a; MVVM 是 Model-View-ViewModel的缩写&#xff0c;即将数据模型与数据表现层通过数据驱动进行分离&#xff0c;从而只需要关系数据模型的开发&#xff0c;而不需要考虑页面的表现&#xff0c;具体说来如下&#xff1a;M…...

分销平台网站建设桂林/微信广告投放平台

1、安装cron工具&#xff1a;apt-getinstall cron 2、开启定时任务&#xff1a;crontab –e 定时任务语句格式为&#xff1a;执行周期命令。 周期有5个域&#xff0c;分别是分&#xff0c;时&#xff0c;日(day of month)&#xff0c;月&#xff08;month of year&#xff09;&…...

成都免费建站模板/中国经济网人事

2.5.3二维数组数据类型 数组名[第一维][第二维];二维数组在定义的时候进行初始化&#xff0c;二维数组在初始化的时候&#xff0c;需要按照第一维顺序依次用大括号给出第二维初始化的情况&#xff0c;然后将他们用逗号分隔并且用大括号全部括住&#xff0c;而在这些被赋予初值的…...

dephi 网站开发/免费com域名注册网站

转载于:https://www.cnblogs.com/arci/p/11030173.html...

Fastcgi做网站/软文案例300字

今天上课老师用Java实现了打地鼠游戏的界面和具体逻辑&#xff0c;那么我也尝试使用Android语言实现其功能。首先是打地鼠游戏的玩法1.每隔1秒或者0.5秒地鼠会出现在九宫格中的任一位置2.点击界面&#xff0c;如果地鼠出现的位置与点击位置相同&#xff0c;则认为打中地鼠。否则…...

企业网站的建设过程/保定seo推广外包

class Solution:找到数组中结果与k接近的3个元素def threeSumClosest(self, numbers, target):# 排序numbers.sort()# 最接近的和ans None# 结果列表res []for i in range(len(numbers)):left, right i 1, len(numbers) - 1# 从i号位置开始搜索&#xff0c;i0时搜索右边所有…...

wordpress视频主题/seo专员是做什么的

学完Java初级也一年了&#xff0c;很多东西都忘的差不多了&#xff0c;今天趁着周日再翻开之前的笔记本好好复习下。 1.java语言是一种编译解释型语言&#xff0c;java编译器将java代码编译成字节码指令存放到.class文件中&#xff0c;运行时使用特定的 java解释器把字节码指令…...