Z
ZHANK
编程在线教程C++ 教程友元与静态成员
面向对象

友元与静态成员

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);