友元与静态成员
friend 函数/类、static 成员变量/函数、类内常量
友元与静态成员
友元(friend)打破封装边界,静态成员(static)属于类本身而非某个对象。
学完本章你将: 掌握 friend 函数/类、static 成员变量/函数。
friend —— 授权访问私有成员
cpp
#include <iostream>
class BankAccount {
double balance = 0;
public:
// 授权 printBalance 访问私有成员
friend void printBalance(const BankAccount &acc);
// 授权整个 Auditor 类
friend class Auditor;
};
// 友元函数可以访问私有成员
void printBalance(const BankAccount &acc) {
std::cout << "余额:" << acc.balance << "\n";
}
class Auditor {
public:
void check(const BankAccount &acc) {
std::cout << "审计:余额 = " << acc.balance << "\n";
}
};
static 成员变量
cpp
class Counter {
static int instanceCount; // 声明——属于类,不属于对象
int id;
public:
Counter() {
id = ++instanceCount;
}
static int getCount() { return instanceCount; }
};
// 必须在类外定义(C++17 前)
int Counter::instanceCount = 0;
// C++17: 可以用 inline 在类内定义
// class Counter {
// static inline int instanceCount = 0;
// };
int main() {
Counter c1, c2, c3;
std::cout << Counter::getCount() << "\n"; // 3
return 0;
}
static 成员函数
cpp
class Math {
public:
static int max(int a, int b) { return a > b ? a : b; }
};
// 不创建对象也能调用
int m = Math::max(3, 5);