## 今天学了什么今天学习C类对象作为类成员语法、类和对象-友元。## 类对象作为类成员在C中类中的成员可以是另一个类的对象在构造时会先构造其他类对象再构造类自身析构顺序则相反。验证打开VIsio studio2022分别创建两个类Person、Phone将Phone类对象作为Person类的成员变量#include iostream using namespace std; #includestring class Phone { public: Phone(string name) { string p_name name; cout Phone 类构造函数 endl; } ~Phone() { cout Phone 类析构函数 endl; } string p_name; }; class Person { public: Person(string name, string phonename):M_name(name), M_phone(phonename) { cout Person 类构造函数 endl; } ~Person() { cout Person 类析构函数 endl; } string M_name; Phone M_phone; }; void test() { Person p(张三,苹果); cout p.M_name 拿着 p.M_phone.p_name 手机 endl; } int main() { test(); return 0; }在test下一个断点进入调试观察发现首先进入的是Phone的构造函数然后进入Person类的构造函数之后在析构时先进入Person的析构函数后进入Phone的析构。*发现如果自己写了有参构造{}里面赋值不写无参构造在创建对象时会出现错误。原因在有参构造情况下编译器不再自动生成无参构造如果类B里面包含另一个类A实体对象创建B的对象时会优先初始化B里面的所有成员再执行B的构造函数{}里的代码。编译器初始化实体对象时会自动调用A的无参构造函数若A写了有参构造没有无参构造编译器找不到A的无参构造就会报错。解决办法手写初始化列表让编译器知道使用A的有参构造。任何构造函数一定存在初始化列表自己不写编译器会帮你隐式生成默认对成员做无参初始化## 友元定义让一个函数或者类访问另一个类中的私有成员。关键字friend三种实现方式全局函数做友元class Personbuild { friend void visitbuild(Personbuild visit); public: Personbuild() { house 客厅; bedroom 卧室; } string house; private: string bedroom; }; void visitbuild(Personbuild visit) { visit.bedroom 厨房; cout 全局函数正在访问 visit.bedroom endl; } test() { Personbuild p; visitbuild(p); }如果不写 friend void visitbuild(Personbuild visit); visitbuild 只能访问 house 不能访问 bedroom 。断点调试无法观察出具体实现步骤在 visitbuild 中尝试改变 Personbuild 的私有成员变量 bedroom进入调试发现在执行这一行代码以后bedroom的值发生改变。类做友元class Personbuild { friend class visiter; public : Personbuild() { house 客厅; bedroom 卧室; } string house; private: string bedroom; }; class visiter { public: void visit() { Personbuild pd; cout visiter类正在访问 pd.house endl; cout visiter类正在访问 pd.bedroom endl; } }; void test() { visiter vs; vs.visit(); }加入 friend class visiter; 实现访问私有成员。成员函数做友元class building; class visiter { public: visiter(); void visit1(); void visit2(); building* build; //building building2; }; class building { friend void visiter::visit2(); public: building() { house 客厅; bedroom 卧室; } string house; private: string bedroom; }; visiter::visiter() { build new building; } void visiter::visit1() { cout 通过指针visit1访问 build-house endl; //cout visit1访问 building2.house endl; } void visiter::visit2() { cout visit2访问 build-bedroom endl; } void test() { visiter vs; vs.visit1(); vs.visit2(); }加入 friend void visiter::visit2(); 实现访问私有成员。*注类A的成员函数类B的做友元代码步骤①前向声明类B②定义类A类内只写函数声明不写函数体实现类内定义B类型成员只能用指针定义不能定义实体对象。③定义类B在内部写友元声明函数体实现也可以写在类外④在B类定义下方写A成员函数的实现⑤创建对象调用函数。## 思考** 在C中传递自定义类传递类型的使用时机 **答在C中传递自定义类如果需要只读优先使用const引用需要修改用引用没有具体实例、需要判空用指针自定义类很少用值传递原因1.开销较大2.如果类里有指针但没写深拷贝构造函数值传递会触发浅拷贝析构时双重释放程序崩溃。
企业数字化 ERP 产品动态
相关推荐
Python协同过滤旅游推荐系统:从矩阵构建到Top-N推荐实现 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 5:24:22
不懂代码搞高权重网站出售:5步用免费工具搞定 不懂代码搞高权重网站出售:5步用免费工具搞定 想做网站却连一行代码都不会写?别慌,这正是大多数创业团队负责人的常态。你不需要成为程序员,只需要会点鼠标和懂得使用 免费工具 ,就能搭建出能卖钱的网站。… · 2026/9/27 5:24:22
搞定wordpress图片优化5大注意事项提速翻倍 搞定wordpress图片优化5大注意事项提速翻倍 很多刚接手企业站的朋友都有个头疼事,就是模板网站太丑不够用,后台一上传图片,页面加载慢得像蜗牛。这时候大家往往第一反应是换服务器或者加CDN,其实很多时候问题出在图片本身没处理好。做wor… · 2026/9/27 5:24:04
AS5600角度跳变根因分析与STM32五层防护实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 6:04:54
吃透C语言核心运算符,一段代码搞定赋值、位运算、逻辑运算、嵌套三目运算 很多C语言初学者学完语法后,最大的痛点就是:分不清赋值/逻辑/位运算的区别、看不懂三目运算嵌套、搞不懂运算符优先级。这些基础运算符是编程的基石,也是笔试、面试、期末考的高频考点,很多人栽在 & 和&&、| 和 ||、普… · 2026/9/27 6:04:54
3个实战案例拆解wordpress4.8模板路径避坑 3个实战案例拆解wordpress4.8模板路径避坑 域名买回来不会配,服务器买完不知道放哪,这种“搞不懂”的焦虑,很多创业团队负责人都经历过。别急,今天不聊虚的,直接上 实战案例… · 2026/9/27 6:04:54
PaddleGAN 图像翻译实战指南:Pix2Pix 与 CycleGAN 的配对/非配对训练全解析 人工智能深度学习计算机视觉媒体生成视频处理图像处理 【免费下载链接】PaddleGAN PaddlePaddle GAN library, including lots of interesting applications like First-Order motion transfer, Wav2Lip, picture repair, image editing, photo2cartoon, image style transfer,… · 2026/9/27 6:04:48
RK3588烧录卡在Loader阶段的根因与实战解决方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 6:04:48
二极管完全指南:从原理到仿真,一文搞懂! 结合线性直流稳压电源实战案例 | 含电路仿真波形图大家好!今天我们来聊聊电子世界里最基础也最重要的器件之一——二极管。无论你是电子小白还是想系统复习的工程师,这篇文章都会带你从原理到仿真,全面搞懂二极管!────────… · 2026/9/27 6:04:48
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01