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

时间:2016-09-09 04:57:43

标签: 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;
}

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

由于

3 个答案:

答案 0 :(得分:6)

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

我想可以说一个班级自动成为朋友&#34;本身。

答案 1 :(得分:2)

  

所有类方法,无论是否静态,都是自动&#34;朋友&#34;的   类。 Friend用于允许外部函数和类访问   去上课。课程总是自己的朋友&#34;。

答案 2 :(得分:2)

基本上,是的,这个班级本身就是朋友,但更好的解释是:

  

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

(从there复制)

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