为什么这段代码有效?我的意思是该成员是私人的

时间:2017-10-16 12:42:52

标签: c++

为什么这段代码有效?我的意思是value是一个私有变量,为什么函数assign()可以直接访问它?

class A {
private:
    int value;
public:
    A() :value(0){ }
    void assign(A x)
    {
        value = x.value;
    }
};

int main()
{
    A a;
    A b;
    a.assign(b);

    return 0;
}

3 个答案:

答案 0 :(得分:4)

private关键字表示类之外的代码无法访问该类。

同一个类的方法可以访问它,当然,如果他们不能没有人可以访问私有变量而且它们就没用了。

如果您担心从A调用的方法访问B的私人成员,请不要担心。
privatepublic的想法是让类的实现细节成为一个没人知道(并且需要知道)的东西,但是类本身。 类A“知道”A本身是如何实现的,因此“允许”使用它的内部结构 - private,即使它们不是被调用对象。 / p>

答案 1 :(得分:2)

除了受保护的继承类成员之外,成员函数(例如,A :: assign(A))可以访问其各自类的私有成员。

答案 2 :(得分:2)

int valueprivate,但void assign(A x)public。在main函数(A类外)中,您只能访问public方法。在A类内部(例如在assign方法中),您可以访问publicprivateprotected成员

例如: 你不能写这样的东西:

A obj;
obj.value;

因为value是私有的。 但您可以使用其他方法访问它:例如,您可以定义set(int val)方法

class A {
private:
    int value;
public:
    A() :value(0){ }
    void set(int val) 
    { 
        value = val; 
    }
    void assign(A x)
    {
        value = x.value;
    }
};

int main()
{
    A obj;
    obj.set(10);
}