C++ 为什么这个代码能工作?我的意思是会员是私人的

C++ 为什么这个代码能工作?我的意思是会员是私人的,c++,C++,为什么这个代码能工作?我的意思是值是一个私有变量,为什么函数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; } 成员函数(例如A::ass

为什么这个代码能工作?我的意思是
是一个私有变量,为什么函数
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;
}

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

关键字
private
表示类外的任何代码都不能访问该类

当然,同一类的方法可以访问它,因为如果它们不能访问私有变量,那么就没有人可以访问私有变量,它们也就没有用了

如果您担心从
A
调用的方法访问
B
的私有成员,请不要担心。
private
public
的思想使得类的实现细节除了类本身之外,没有人知道(并且需要知道)。

A
知道
A
本身是如何实现的,因此“允许”使用它的内部构件-
private
s,即使它们不是被调用的对象。

int value
private
,但是
void assign(A x)
public
。在main function(A类之外)中,您只能访问
public
方法。在类A内部(例如在
assign
方法中),您可以访问
public
private
protected
成员

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

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

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

类方法可以访问自己类的私有成员。Private只是意味着不能从类外直接访问它。如果private的意思是“这不能被任何人使用”,那就没用了。你的入门书/课程/教程肯定解释了访问修饰符。通过最近的编辑,问题的这一方面现在已经很清楚了。在问题达到预期的改进后,我删除了相应的评论,为了不让任何人感到困惑,既然问题已经由OP编辑。