C++ Friend类

示例

整个班级都可以宣布为朋友。Friend类声明是指朋友的任何成员都可以访问该声明类的私有成员和受保护成员:

class Accesser {
public:
    void private_accesser1();
    void private_accesser2();
};

class PrivateHolder {
public:
    PrivateHolder(int val) : private_value(val) {}
    friend class Accesser;
private:
    int private_value;
};

void Accesser::private_accesser1() {
    PrivateHolder ph(10);
    // 好。
    std::cout <<ph.private_value<< std::endl;
}

void Accesser::private_accesser2() {
    PrivateHolder ph(10);
    // 好。
    std::cout <<ph.private_value+ 1 << std::endl;
}

朋友类声明不是反身的。如果类需要双向双向私有访问,则它们都需要朋友声明。

class Accesser {
public:
    void private_accesser1();
    void private_accesser2();
private:
    int private_value = 0;
};

class PrivateHolder {
public:
    PrivateHolder(int val) : private_value(val) {}
    // Accesser是PrivateHolder的朋友
    friend class Accesser;
    void reverse_accesse() {
        // 但是PrivateHolder无法访问Accesser的成员。
        Accesser a;
        std::cout << a.private_value;
    }
private:
    int private_value;
};