C++ 类和对象零散知识点

C++ 类和对象零散知识点

成员函数的声明和定义

  • 类的成员函数,如果定义在类中,默认为 inline 函数
  • 如果声明定义分离,则要在函数定义前面指定类域

类和对象的空间占用

  • 类 就像一张设计图纸,运行时是不占用堆栈内存的
  • 对象 占用的内存由非静态成员变量决定,成员函数、静态成员变量、成员函数都不会占用空间
  • 空类 是特殊的,即使它里面没有任何成员变量,C++规定它的对象大小为 1 字节,这是为了保证每个不同对象都有唯一内存地址

注意

内存对齐和虚函数也会影响对象的大小,内存对齐 不在此处解释;如果类有虚函数,对象里会多出一个虚表指针 (vptr),占用 8 字节 (64 位系统),指向虚函数表。

this 指针

C++规定不能在实参和形参的位置显式的写this指针(编译时编译器会处理),但是可以在函数体内显式使⽤this指针。

友元

友元提供了一种突破类访问限定符封装 的方式,它可以给外部函数(即 友元函数)或外部类(即 友元类)赋予"好友权限",使它们可以访问类内部的私有成员,恰如它的关键字:friend 那样。

  • 使用时,在函数声明或者类声明的前面加 friend ,并且把友元声明放到一个类的里面
  • 外部友元函数可访问类的私有和保护成员,友元函数仅仅是一种声明,它不是类的成员函数
  • 友元函数可以在类定义的任何地方声明,不受类访问限定符限制
  • 一个函数可以是多个类的友元函数
  • 友元类的关系是单向的 且不能传递的,不具有交换性

内部类(嵌套类)

一个类里面定义的另一个类,就是内部类。内部类的本质是独立类型,仅作用域被包裹在外部类中,不是外部类成员变量。

  • 创建外部类对象不会自动创建内部类对象;sizeof(外部类)不计入内部类大小;C++内部类无隐式外部类this指针
  • 内部类可访问外部类全部成员,前提:手动传入外部类对象/指针/引用。
  • 外部类可访问内部类全部成员,前提:创建内部类对象;静态成员可直接Inner::静态成员访问
  • 内部类默认是外部类的友元类

匿名对象

匿名对象是没有名字的临时对象,创建后没有变量接收,生命周期仅在当前这一行表达式结束。

  • 创建格式:类名(),不定义变量名。
cpp 复制代码
// A 是一个类

// 对于普通对象
A aa1(); //不能这么定义,因为编译器⽆法识别它是⼀个函数声明,还是对象定义 

// 对于匿名对象
A(); // 是可以的
相关推荐
akinggw11 分钟前
libsherpacore - 基于 sherpa-onnx 的 C++ 语音交互静态库
c++·交互·语音识别
xiaoye-duck26 分钟前
《C++ 项目:手写大模型接入 SDK》ChatGPT接口设计(中):全量响应实现和测试
网络·c++·语言模型·chatgpt
揽星河..29 分钟前
【C语言】指针
c语言·开发语言
小小数媒成员1 小时前
UGUI原理(一)
开发语言·游戏·unity·游戏引擎
速易达网络1 小时前
Three.js 动画入门教学:从场景搭建到流畅动效
开发语言·javascript·ecmascript
東隅已逝,桑榆非晚1 小时前
算法3.双指针法-快乐数
c++·笔记·学习·算法
福大大架构师每日一题1 小时前
excelize v2.11.1发布:Go 1.26.0起步,16项安全修复与嵌入对象能力全面升级
开发语言·安全·golang
Sarvartha1 小时前
集合概述 & Collection 接口
开发语言
lhbweilai2 小时前
QT项目(串口助手)
开发语言·qt
eggwyw2 小时前
C++相交链表和反转链表详解
开发语言·c++