目录

一,初始化列表

1,概念

2,细节

​编辑3,代码:

二,类型转换

三,static成员

1,静态成员的核心特性

2,初始化规则:

3 .存储与生命周期

4.与普通成员对比

四、友元的核心概念

1. 本质与作用

2. 友元类型

五,内部类

1. 四大核心特性

六,匿名对象

1,匿名对象的概念

2,匿名对象的特性

3,常见应用场景

4,注意事项


一,初始化列表

1,概念

在C++中,初始化列表(Initializer List) 是构造函数中用于直接初始化成员变量的语法结构。它位于构造函数参数列表之后、函数体之前,以冒号(:)引导,通过逗号分隔多个成员变量的初始化语句。其核心作用是在对象构造阶段(而非函数体执行阶段)完成成员变量的初始化,尤其对const成员、引用成员、无默认构造函数的类类型成员等场景至关重要。

2,细节
3,代码:

错误代码:

class B
{
public:

private:
	int b=10;
};
class A
{
public:
	A(int a = 1)//如果不给_b,_c初始会报错,如果B类没有写构造(也没有默认构造)也会报错
		:_a(a)
		//_b(b),
		//_c(c)
	{

	}
private:
	int _a = 0;//给缺省值
	int& _b;
	const int _c;
	B _d;
};

纠正:

class A
{
public:
	A(int a = 1,int &b,const int c)//如果不给_b,_c初始会报错,如果B类没有写构造(也没有默认构造)也会报错
		:_c(c),//初始化顺序是按声明顺序_a->_b->_c->_d
		_a(a),
		_b(b)
	{

	}
private:
	int _a = 0;//给缺省值
	int& _b;
	const int _c;
	B _d;
};

二,类型转换

在C++中,类型转换(Type Conversion) 是将一种数据类型的值转换为另一种类型的过程,分为隐式转换(编译器自动完成)和显式转换(开发者手动强制)。这是C++类型系统的核心机制,直接影响代码安全性、性能和可维护性。

Int*可以转换成const int*(权限可以缩小)

const int*不可以转换成int*(权限不可以放大)

float i=1.22;
int c=i;//这个时候小数部分丢失(double同理)
//double→float可能丢失精度或溢出

double→float可能丢失精度或溢出

三,static成员

1,静态成员的核心特性
特性 说明
全局唯一性 无论创建多少对象,静态成员仅初始化一次
类作用域 通过类名直接访问(ClassName::static_member),不依赖对象实例
this指针 静态成员函数不能访问非静态成员(因无对象上下文)
存储位置 位于全局数据区(与全局变量同区),非对象内存空间
2,初始化规则:
class B
{
public:
	B(const int B)
		:b(B)
	{

	}
private:
	int b = 10;
	static int i;
	static const int i1 = 0;
};
int B::i = 10;

必须显式初始化:非const静态成员需在类外定义(C++17前)

3 .存储与生命周期
  • 存储位置:静态成员位于全局数据段(.data/.bss
  • 生命周期:从程序启动到结束(与全局变量相同)
  • 访问控制:仍受public/private限制(不同于全局变量)
4.与普通成员对比
成员类型 存储位置 生命周期 访问方式
普通成员 对象内存空间 随对象创建/销毁 通过对象实例
静态成员 全局数据区 程序全程 类名或对象间接访问

四、友元的核心概念

1. 本质与作用
  • 打破封装:在严格封装场景下提供可控的"后门"
  • 单向授权:类主动声明友元(非对称关系)
  • 应用场景
    • 运算符重载(如<<>>
    • 跨类协作(如工具类访问私有数据)
    • 性能优化(避免getter/setter开销)
2. 友元类型
类型 声明方式 访问权限
友元函数 friend void func(MyClass&); 可访问声明类的所有成员
友元类 friend class FriendClass; 友元类的所有函数可访问私有成员
成员函数作为友元 friend void Other::func();

特定成员函数获得访问权限

注意:友元会破坏类的封装,要尽量少用.

五,内部类

1. 四大核心特性
特性 说明
非成员关系 不占用外部类对象空间(sizeof(Outer)不含内部类)
默认友元权限 内部类自动成为外部类的友元(可访问私有成员)
访问限定符约束 内部类自身受外部类访问限定符控制(如private class Inner则外部不可见)
独立作用域 需通过Outer::Inner访问(避免全局命名污染)

六,匿名对象

1,匿名对象的概念

匿名对象是指在创建时未被赋予显式变量名的对象,通常直接用于方法调用或赋值操作。其生命周期仅限于当前表达式或语句,执行完毕后可能被垃圾回收机制处理(取决于语言特性)。

2,匿名对象的特性
  • 无变量引用:不通过变量名访问,直接通过new关键字创建并使用。
  • 一次性使用:适用于仅需临时调用的场景,如单次方法调用或参数传递。
  • 内存效率:部分语言中匿名对象可能更快被回收,但频繁创建可能影响性能。
3,常见应用场景

C++示例

// 临时对象用于函数参数  
func(MyClass());  
4,注意事项
  • 调试困难:匿名对象无变量名,堆栈跟踪中难以标识。
  • 生命周期限制:无法在后续代码中重复引用,需谨慎设计使用场景。

匿名对象的核心价值在于简化代码结构,适用于逻辑简单且无需复用的场景。

更多推荐