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

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

成员函数的声明和定义

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

类和对象的空间占用

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

注意

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

this 指针

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

友元

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

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

内部类(嵌套类)

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

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

匿名对象

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

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

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

// 对于匿名对象
A(); // 是可以的
相关推荐
xiangyun611 小时前
C++ list 模拟实现(二):const迭代器与反向迭代器,模板的黑魔法
开发语言·数据库·c++·算法·stl·list
DLite2 小时前
NLang 0.9.0发布:成为可嵌入语言
开发语言·编程语言·编译技术·nlang
有同事要进步2 小时前
LeetCode 14. 最长公共前缀:纵向扫描一次讲透
开发语言·python
修船大队长2 小时前
CanNm 从休眠唤醒后重复消息报文的周期与数量分析
开发语言·php
事圆则缓2 小时前
Kotlin 变量与函数:把页面状态和行为写成清楚的契约
android·开发语言·kotlin
silvamux_2 小时前
豆包 API 调用教程:Python 接入可跑通示例
开发语言·python
wdfk_prog2 小时前
LWIP教程 15:IPv4 与 IPv6——从网络层工作原理到嵌入式工程取舍
运维·开发语言·网络·笔记·学习·智能路由器·ip
棉猴2 小时前
玩游戏学Python10-算术运算符应用2
开发语言·python·玩游戏·游戏编程
tachibana23 小时前
Go 语言的 Map 是否是并发安全的?
开发语言·数据结构·后端·golang·go·语言