【CPP】类和对象 下

发布时间:2026/9/24 12:47:07

【CPP】类和对象 下 本文接类和对象上继续介绍类的内容1.构造函数的初始化列表在之前实现构造函数时我们主要通过在函数体内赋值来初始化成员变量。实际上构造函数还有另一种初始化方式——初始化列表。其使用方式是以一个冒号开始后接一个以逗号分隔的数据成员列表每个“成员变量”后面跟一个放在括号中的初始值或表达式。每个成员变量在初始化列表中只能出现一次。从语法上理解初始化列表可以视为每个成员变量定义并初始化的地方。引用成员变量、const成员变量以及没有默认构造函数的类类型变量必须放在初始化列表中进行初始化否则会导致编译错误。C11支持在成员变量声明的位置赋予缺省值。这个缺省值主要用于那些没有在初始化列表中显式初始化的成员。应尽量使用初始化列表进行初始化。因为即使你没有在初始化列表中显式初始化的成员也会走初始化列表的流程如果该成员在声明时给了缺省值初始化列表会使用这个缺省值进行初始化如果没有给缺省值对于内置类型成员C标准并未规定其是否初始化这取决于编译器对于自定义类型成员则会调用该成员类型的默认构造函数如果没有默认构造函数同样会导致编译错误。初始化列表中成员变量的初始化顺序严格按照它们在类中的声明顺序进行与在初始化列表中出现的先后顺序无关。因此建议保持成员变量的声明顺序与初始化列表中的顺序一致以避免潜在的混淆。初始化列表总结无论是否显式写出初始化列表每个构造函数都拥有一个初始化列表。无论是否在初始化列表中显式初始化成员变量每个成员变量都必须经过初始化列表进行初始化。初始化列表格式在Date类中增加三个成员变量不修改构造构造函数就会出现下面报错在Time 类改成默认构造在初始化列表中初始化引用和cost 就可以正常初始化了其次也可以在类声明成员变量的时给默认值下面给出构造函数初始化的规则2.类型转换C支持将内置类型隐式转换为类类型对象这要求类拥有以该内置类型为参数的构造函数。如果在构造函数前加上explicit关键字则该构造函数将不再支持隐式类型转换。类类型的对象之间也可以进行隐式转换这同样需要相应的构造函数支持。class A { public: // 构造函数explicit就不再⽀持隐式类型转换 // explicit A(int a1) A(int a) :_a1(a) { } int Get() const { return _a1; } private: int _a1; }; class B { public : B(const A a) :_b1(a.Get()) { } private: int _b1; }; int main() { int c 2; A a(c);//c转换成A 类型 B b(a); //A类型转换成B类型 return 0; }3.static 成员用static修饰的成员变量称为静态成员变量它必须在类外进行初始化。静态成员变量为所有类对象所共享不属于某个具体的对象不存储在对象中而是存放在静态区。用static修饰的成员函数称为静态成员函数静态成员函数没有this指针。静态成员函数可以访问其他静态成员但不能访问非静态成员因为它没有this指针。非静态成员函数可以访问任意的静态成员变量和静态成员函数。突破类域即可访问静态成员可以通过类名::静态成员或对象.静态成员的方式访问静态成员变量和静态成员函数。静态成员同样是类的成员受public、protected、private访问限定符的限制。静态成员变量不能在声明位置通过缺省值初始化因为缺省值是为构造函数初始化列表准备的而静态成员变量不属于某个对象不经过构造函数初始化列表。下面给出static 的应用实列//实现一个类计算出创建了多少个对象 class A { public: //通过构造函数 构造对象 A(int a 1) :_a(a) { count; } //通过拷贝构造 构造对象 A(const A a) { _a a._a; count; } ~A() { count--; } static int GetACount() { return count; } private: int _a; static int count; }; //初始化 int A::count 0; int main() { cout A::GetACount() endl; A aa; A bb(aa); cout A::GetACount() endl; return 0;4.友元我们可以看到在类外面定义的函数是无法访问该类的私有成员变量为了解决这种类似的问题就有了友元友元提供了一种突破类访问限定符封装的机制主要分为友元函数和友元类。通过在函数或类声明前添加friend关键字并将友元声明置于类的内部即可建立友元关系。外部友元函数可以访问类的私有和保护成员但它本身并不是类的成员函数。友元函数可以在类定义的任何位置声明不受类访问限定符的限制。一个函数可以同时成为多个类的友元函数。友元类中的所有成员函数都可以作为另一个类的友元函数从而访问该类的私有和保护成员。友元类的关系是单向的不具有交换性。例如若 A 类是 B 类的友元B 类不一定是 A 类的友元。友元类关系不具备传递性。如果 A 是 B 的友元B 是 C 的友元A 不一定是 C 的友元。友元机制虽然提供了便利但会增加类之间的耦合度破坏封装性因此不宜过度使用。// 前置声明都则A的友元函数声明编译器不认识B class B; class A { // 友元函数声明 friend void func(const A aa, const B bb); //也可以友元类声明 //friend B; private: int _a1 1; int _a2 2; }; class B { // 友元声明 friend void func(const A aa, const B bb); private: int _b1 3; int _b2 4; }; void func(const A aa, const B bb) { cout aa._a1 endl; cout bb._b1 endl; }5.内部类如果一个类定义在另一个类的内部这个内部类就叫做内部类。内部类是一个独立的类与定义在全局的类相比它仅受外部类类域和访问限定符的限制。因此外部类定义的对象中并不包含内部类的实例。内部类默认是外部类的友元类。内部类本质上也是一种封装手段。当 A 类与 B 类紧密关联且 A 类实现出来主要就是供 B 类使用时可以考虑将 A 类设计为 B 类的内部类。如果将其放在private或protected访问限定符下那么 A 类就成为 B 类的专属内部类在其他地方都无法使用。内部类的一个简单的应用class A { private: int _a1 1; int _a2 2; public: class B//默认是A的友元类 { public: void func(const A a) { cout _b1 endl; cout a._a1 endl; } private: int _b1 3; int _b2 4; }; }; int main() { A a; A::B b; b.func(a); return 0; }6.匿名对象用类型实参定义出来的对象叫做匿名对象相比之前我们定义的类型对象名实参定义出来的叫有名对象匿名对象生命周期只在当前一行一般临时定义一个对象当前用一下即可就可以定义匿名对象看下面代码的示例class A { public: A(int a) :_a1(a) { } private: int _a1 ; int _a2 ; public: }; class B { public: B(const A a) { //... cout _b1 endl; } private: int _b1; int _b2; }; int main() { A a(2); B b1(a); B b2(A(5));//A5创建临时匿名对象 return 0; }类和对象的一些基本内容就基本介绍完了
延伸阅读

更多相关文章

2026/9/24 4:26:31

Unity集成WebRTC视频流:基于WebViewForWindow的网页播放器嵌入方案

1. 项目概述与核心思路最近在做一个Unity项目,需要接入一个第三方的WebRTC视频流服务。这个服务商只提供了基于浏览器的播放器,就是一个标准的HTML5页面,里面嵌入了WebRTC的JavaScript SDK。一开始,我本能地想到Unity官方的WebRTC…

2026/9/21 11:51:30

MBD与AUTOSAR:汽车控制器开发的核心技术栈与职业发展指南

1. 先搞清楚 MBD 和 AUTOSAR 到底在解决什么问题很多人问学 MBD 和 AUTOSAR 能不能找到好工作,其实这个问题背后,是想知道这两个技术栈在当下的汽车行业里,到底扮演什么角色,以及它们能带来多大的职业竞争力。我接触过不少从零开始…

2026/9/19 11:45:57

Java序列化脱敏技术在银行系统中的应用

1. 银行账户数据脱敏的必要性与挑战在金融系统开发中,账户数据的安全性始终是重中之重。想象一下,当我们需要将客户账户信息从内存写入文件或通过网络传输时,如果直接将完整的账户号码、身份证号、手机号等敏感信息以明文形式存储或传输&…

2026/9/24 14:46:24

Jackett索引器评分系统:告别资源选择困难症的终极解决方案

Jackett索引器评分系统:告别资源选择困难症的终极解决方案 你是否曾经面对数百个种子资源却不知如何选择?是否因为下载了低质量内容而浪费时间和带宽?Jackett的智能评分系统正是为你解决这一痛点的完美工具。作为开源项目Jackett的核心功能之…

2026/9/24 14:46:24

Hi3798MV300刷机实战:让CM201-2变身家庭电视安全中枢

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 14:46:24

冥想第两千一十一天(2011)

1.周二,项目上全力以赴的一天,今天游泳日,还是不会转体的时候借力,不过我会不断的练习。 2.感谢父母,感谢朋友,感谢家人,感谢不断进步的自己。

2026/9/24 14:41:23

shadcn-vue Dropdown Menu 组件完整指南:安装、API 与实战示例

UI组件前端 【免费下载链接】shadcn-vue Vue port of shadcn-ui 项目地址: https://gitcode.com/gh_mirrors/sh/shadcn-vue 点击查看 免费下载 本指南围绕 shadcn-vue 中的 Dropdown Menu(下拉菜单)组件展开,它是通过按钮等触发器…

2026/9/23 12:07:00

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/23 12:06:55

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/24 0:00:21

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:21

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:21

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码