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

C++基础 类和对象(三)

一.初始化列表

语法格式:



1.为什么要使用初始化列表

很多人以为

效果一样

实际上并不一样。

普通赋值:

过程:

先调用成员变量默认构造

再进行赋值

相当于:x先被创建
然后x = 10

初始化列表:

x在创建时直接变成10

少了一次“先创建再赋值”的过程,效率更高。

示例:

输出:张三 18

2.初始化列表的执行顺序

初始化列表中按照成员变量在类中声明顺序进⾏初始化,跟成员在初始化列表出现的的先后顺序⽆ 关。建议声明顺序和初始化列表顺序保持⼀致。

真正顺序:a先初始化
b后初始化

3.哪些成员必须使用初始化列表初始化

1.const成员

因为const变量定义后不能再赋值

2.引用成员

引用必须在定义时绑定

3.没有默认构造的对象成员

无法默认构造。

总结:

⽆论是否显⽰写初始化列表,每个构造函数都有初始化列表; ⽆论是否在初始化列表显⽰初始化成员变量,每个成员变量都要⾛初始化列表初始化;

二.static成员

1.静态成员变量

输出:3

为什么是3?

因为count 是所有对象共享的

每一次创建对象

2.static成员变量特点

1.属于整个类,不是对象独有,所有对象共用一份。

2.不在对象中存储

3.必须类外定义

4.类内只是声明

5.静态成员也是类的成员,受public、protected、private访问限定符的限制。

3.static成员访问方式

1.类名访问

2.对象访问

4.静态成员函数

输出:

5.静态成员函数特点

1.没有 this 指针

2.属于类

6.静态成员函数只能访问静态成员

错误示例:



没有this不知道_a属于哪个对象

7.⾮静态的成员函数,可以访问任意的静态成员变量和静态成员函数。

8.静态成员变量不能在声明位置给缺省值初始化,因为缺省值是个构造函数初始化列表的,静态成员 变量不属于某个对象,不⾛构造函数初始化列表。

三.友元

友元提供了⼀种突破类访问限定符封装的⽅式,友元分为:友元函数和友元类,在函数声明或者类 声明的前⾯加friend,并且把友元声明放到⼀个类的⾥⾯。

1.友元函数

输出:10

2.友元函数的特点

1.不是成员函数

2.友元关系是单向的

A是B的友元

不代表B也是A的友元

3.⼀个函数可以是多个类的友元函数。

3.友元类

一个类可以成为另一个类的友元。

输出:100

友元类关系不能传递,如果A是B的友元,B是C的友元,但是A不是C的友元。

有时提供了便利。但是友元会增加耦合度,破坏了封装,所以友元不宜多⽤

四.内部类

如果⼀个类定义在另⼀个类的内部,这个内部类就叫做内部类。内部类是⼀个独⽴的类,跟定义在 全局相⽐,他只是受外部类类域限制和访问限定符限制,所以外部类定义的对象中不包含内部类。

这里B就是A的内部类

内部类默认是外部类的友元类

内部类本质也是⼀种封装,当A类跟B类紧密关联,A类实现出来主要就是给B类使⽤,那么可以考 虑把A类设计为B的内部类,如果放到private/protected位置,那么A类就是B类的专属内部类,其 他地⽅都⽤不了。

五.匿名对象

⽤类型(实参)定义出来的对象叫做匿名对象,相⽐之前我们定义的类型对象名(实参)定义出来的 叫有名对象

输出:

这里 A()创建了一个对象,但没有名字,所以叫匿名对象

匿名对象的特点:

1.没有对象名

2.生命周期只有当前语句

这一句结束,对象立即销毁

http://www.cnnetsun.cn/news/2566346.html

相关文章:

  • 别再折腾驱动了!用DKMS一劳永逸管理你的Linux网卡(以RTL8822CE/Ubuntu 18.04为例)
  • 别再死记硬背了!用Wirtinger导数轻松搞定复数求导(附Python代码验证)
  • 别再傻等自动下载了!手把手教你从国内镜像站搞定Wine 5.0的mono和gecko插件
  • LOOKAHEAD REASONING:大型推理模型的并行加速技术
  • RK3588 Debian 系统安装与WiFi/SSH配置笔记
  • FPG财盛国际:从风险提示看平台责任意识
  • Linux系统启动慢?从UEFI的DXE阶段入手,优化驱动加载让你的开机快人一步
  • 【复现】中国上市公司全要素生产率测算与分析(论文+数据)
  • 从Sora 2原始张量到可交付MP4:端到端Pipeline中被92%开发者忽略的色彩空间转换断点(BT.2020→BT.709→sRGB三级校准手册)
  • 【Claude AI深度SWOT解码】:20年AI架构师亲授,4大维度拆解其商用致命短板与突围路径
  • 你的副业计划又黄了。不是意志力的锅
  • 基于ESP32打造智能网络收音机:硬件选型、软件实现与音质优化全攻略
  • ESP32多任务水位监测:从Arduino到ESP-IDF的FreeRTOS实战
  • 高频率登录尝试 ip封禁已经实现
  • 给服务器添加最外层风控系统
  • 基于ESP8266与WS2812B的智能氛围灯DIY:从硬件连接到Web控制
  • 基于STM32WB与BLE-MIDI的体感节奏控制器:BeatShaker设计与实现
  • AMD锐龙SDT调试工具终极指南:5个进阶技巧解锁处理器深度调优
  • Linux——进程和线程
  • Linux服务器被挖矿木马劫持的五步应急处置指南
  • 基于放射性衰变的真随机数生成器:从量子物理到嵌入式实现
  • ‌2026智慧校园规划必读:如何在预算吃紧下选到高性价比方案‌
  • 抖音批量下载神器:douyin-downloader 免费工具全攻略
  • Lovable电商网站搭建陷阱大全(2024最新版):Nuxt 3 SSR失效、Stripe Webhook丢包、SEO结构坍塌三大隐形杀手曝光
  • 惠普战99新机踩坑记:Win11家庭版下VMware装Ubuntu,键盘延迟1秒怎么破?
  • AI写的论文双率如何压到20%以下?这几款工具实测有效
  • 基于TTP223的离线电容触摸开关设计:厨房灯控DIY方案
  • 转行网络安全运维:从0到1的可落地指南
  • pan-baidu-download:百度网盘多线程下载加速器架构解析与性能优化指南
  • 【Sceneform-EQR】让Android 原生 3D开发更容易