是一个类自动成为自己的朋友

Bla*_*lle 7 c++

为什么这样做?

#include <stdio.h>

class ClassA
{
public:
    ClassA(int id) : my_id(id) { };

    ClassA * makeNewA(int id)
    {
        ClassA *a = new ClassA(id);
        printf("ClassA made with id %d\n", a->getId());
        return a;
    };

private:
    int getId() {
        return my_id;
    };

private:
    int my_id;
};

int main()
{
    ClassA a(1);
    ClassA *b = a.makeNewA(2);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

无论这是否是一个好主意,为什么它有效?public函数ClassA::makeNewA(int)实例化一个新的ClassA,然后getId()使用新对象调用一个私有函数.班级自动成为自己的朋友吗?

谢谢

Bin*_*gsF 7

是的,有意的是,类的public方法可以访问自己的private成员,即使该方法在不同的实例上运行.

我想可以说一个类自动成为它自己的"朋友".


PcA*_*cAF 5

基本上,是的,这个类是它自己的朋友,但更好的解释是:

在 C++ 中,访问控制基于每个类,而不是基于每个对象。

(从那里复制)

请注意,这也适用于其他语言,例如Java(在其中您没有朋友),其中访问控制也适用于每个类