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

Why this code is working ? I mean the member is private

本文关键字:意思是 我的 段代码 代码 有效 为什么      更新时间:2023-10-16

为什么这段代码有效?我的意思是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;
}

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

当然,同一类的方法可以访问它,因为如果它们不能,没有人可以访问私有变量,它们将毫无用处。

如果您担心从调用A的方法访问B的私有成员,请不要担心。
privatepublic的想法是使类的实现细节成为没有人知道(并且需要知道)的事情,而是类本身。
A"知道"A本身是如何实现的,因此"允许"使用它的内部结构 - private s,即使它们不属于被调用的对象。

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

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);
}
相关文章: