C++类成员
一、内联函数(Inline Functions)
-
作用
解决频繁调用小函数时的栈内存消耗问题,通过将函数代码直接插入调用点,避免压栈/出栈开销。 -
定义形式
inline 返回类型 函数名(参数列表) { ... }
• 隐式声明:类内直接定义的成员函数默认内联(需函数体简单)。
• 显式声明:类外定义时使用
inline
关键字。 -
限制条件
• 函数体不能包含复杂结构(如循环、分支、递归)。• 编译器可能忽略复杂函数的
inline
请求。 -
适用场景
适用于短小且频繁调用的函数(如getter/setter
)。
二、this指针
-
作用
指向当前对象实例,隐式传递给成员函数,用于区分参数与成员变量名冲突。 -
示例
class A {int x, y; public:A(int x, int y) {this->x = x; // 使用this区分成员变量this->y = y;} };
-
特点
• 类型为类名* const
(常量指针)。• 成员函数中访问成员变量时默认隐含
this->
。
三、静态成员(Static Members)
-
静态数据成员
• 定义:类内声明,类外初始化(必须一次)。class SavingsAccount {static float currentRate; // 类内声明 }; float SavingsAccount::currentRate = 0.02; // 类外初始化
• 特性:所有对象共享同一内存,属于类而非对象。
-
静态成员函数
• 定义:使用static
修饰,无this
指针,只能访问静态成员。static void updateRate(float r) { currentRate = r; }
• 调用方式:通过类名直接调用。
SavingsAccount::updateRate(0.03);
-
应用场景
共享数据(如利率、计数器)或工具函数。
四、友元(Friend)
-
友元函数
• 作用:允许非成员函数访问类的私有成员。• 声明:类内用
friend
修饰,定义在类外。class A {friend void printA(const A& a); // 友元函数声明 }; void printA(const A& a) { ... } // 可直接访问A的私有成员
-
友元类
• 声明:友元类的所有成员函数可访问当前类的私有成员。class B { friend class C; };
-
注意事项
• 破坏封装性,需谨慎使用。• 关系单向、不可传递、不可继承。
五、const成员函数
-
定义
在函数参数列表后加const
,表示不修改对象状态。class A {int x; public:int getX() const { return x; } // 常成员函数 };
-
特性
• 不能修改成员变量,不能调用非const
成员函数。• 常对象(
const A a;
)只能调用const
成员函数。 -
应用场景
保证对象状态不变的接口(如getter
方法)。
六、问题解决示例
-
构造函数参数冲突
使用this->x = x
避免同名参数覆盖成员变量。 -
静态成员共享数据
如银行账户类中,用static float currentRate
实现所有账户共享利率。 -
友元访问私有成员
通过友元函数或友元类直接操作私有数据(需权衡封装性)。
总结
• 内联函数优化性能,但需谨慎使用。
• this指针解决成员变量与参数同名问题。
• 静态成员实现数据共享,类外初始化是关键。
• 友元提供跨类访问权限,但破坏封装性。
• const成员函数确保对象状态安全,是常对象的唯一接口。
通过合理使用这些特性,可以提升代码效率和设计灵活性,同时需注意维护良好的封装性。