发布时间:2026/8/6 3:14:34
【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/8/6 3:14:34

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

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

2026/8/6 3:14:34

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

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

2026/8/6 3:14:34

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

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

2026/8/6 4:19:39

Eureka:注册中心全景深入梳理

Eureka 是 Netflix 开源、Spring Cloud 初代标配的服务注册与发现组件,遵循 AP 架构,优先保障分布式系统可用性与分区容错,是微服务领域经典的去中心化注册中心实现。本文从架构分层、核心流程、底层存储缓存、集群机制、自我保护、关键参数、…

2026/8/6 4:19:39

Sentinel:限流熔断全景深入梳理

Sentinel 是阿里开源的轻量级流量控制与微服务容错防护组件,以“流量为核心、稳定性为目标”,专注解决微服务架构中流量突增、服务雪崩、接口超时、异常扩散等核心问题。相较于传统容错组件,Sentinel 具备轻量无侵入、规则动态生效、多维度防…

2026/8/6 4:19:39

Aurora MySQL 开启 Performance Insights 踩坑实录:db.t3 不支持怎么办?

生产环境出现慢 SQL 需要排查,开启 Performance Insights 时报错 InvalidParameterCombination,本文记录完整排查过程和解决方案。 前言 Performance Insights 是 AWS RDS/Aurora 内置的数据库性能分析工具,可以可视化 DB Load、定位慢 SQL、分析等待事件。当你的 Aurora M…

2026/8/6 4:19:39

SpringBoot:Payload统一响应包装/全景深入梳理

在SpringBoot微服务开发体系中,前后端交互、服务间调用的核心载体是接口Payload响应数据。原生SpringBoot接口直接返回实体对象、集合、基本类型,存在返回格式混乱、状态标识不统一、异常返回碎片化、前端适配成本高、接口规范性差等一系列生产问题。Pay…

2026/8/6 4:19:39

XiaDown下载工具

链接:https://pan.quark.cn/s/6d6eff4a28aeXiaDown 是一款在线音乐播放器,也是一款支持双引擎下载的视频下载工具。它是为内容创作者打造的日常工具:需要素材时,用嗅探和 YT-DLP 下载;需要专注时,在后台播放…

2026/8/6 4:14:39

浏览器智能体AiPy:自动化数据采集与反爬解决方案

1. 项目概述:浏览器控制智能体的自动化革命最近在数据采集领域出现了一个突破性的工具——AiPy浏览器控制智能体。这个解决方案彻底改变了传统爬虫的工作模式,通过模拟人类操作浏览器的方式实现数据采集自动化。我在实际项目中测试发现,相比传…

2026/8/5 3:13:11

如何用免费工具突破游戏窗口限制:SRWE完整使用指南

如何用免费工具突破游戏窗口限制:SRWE完整使用指南 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE 你是否遇到过这样的困扰?想为心爱的游戏截图,却发现游戏不支持自定义分辨率…

2026/8/6 0:04:22

电力系统调度中的源荷不确定性建模与优化实践

1. 电力系统调度中的源荷不确定性挑战现代电力系统正面临前所未有的复杂性,其中源荷不确定性(Source-Load Uncertainty)已成为调度决策中最棘手的难题之一。我在参与某省级电网调度系统升级时,曾遇到风电预测误差导致日内调度计划…

2026/8/6 0:04:22

VGG-T3技术解析:3D重建速度的革命性突破

1. 项目概述:VGG-T3如何重新定义3D重建速度在计算机视觉领域,3D场景重建一直是个计算密集型任务。传统方法重建1000帧图像规模的场景往往需要数小时甚至更长时间,而英伟达最新发布的VGG-T3技术将这个时间压缩到了惊人的54秒。这个突破性进展来…

2026/8/6 0:04:22

深度解析旅游网站建设的意义及其对行业发展的深远影响与核心价值体现

在这个数字化浪潮席卷全球的今天,我们似乎已经忘记了,曾经有一段时间,人们想要去一个陌生的地方,只能靠在书桌前翻阅厚厚的旅游杂志,或者向刚从那里回来的朋友询问那些模糊不清的印象。那时候,“远方”是一个需要精打细算才能抵达的奢侈概念。而现在,只需要一部手机,轻…

2026/8/5 19:21:13

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/5 19:21:13

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/5 19:21:13

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…