gpt4 book ai didi

c++ - 为什么类的私有(private)变量可以从类中的对象访问?

转载 作者:太空宇宙 更新时间:2023-11-04 15:11:43 24 4
gpt4 key购买 nike

假设我们有一个类,它有一个 private 变量和一个 max 方法,该方法采用与类相同类型的单个参数:

class A
{
private:
int Number;

public:
A() : Number(0) {}
A(int val) : Number(val) {}

int max(A b)
{
if( Number > b.Number )
return Number;

return b.Number;
}
};

令我感到奇怪的是,max 方法中的参数b 可以访问private 变量Number。然而,在 main 函数中,我们无法访问参数 Number(正如预期的那样,因为它被声明为 private)

int main()
{
A a;

a.Number = 0; // ERROR

return 0;
}

所以我的问题是为什么类中的函数在声明为 private 时可以访问变量 Number

最佳答案

这只是规则,仅此而已。

它旨在使成员函数,尤其是赋值运算符、复制构造函数和重载运算符等函数更易于编写。如果您不能直接访问“other”对象的成员,那么您将需要过多的 friend 声明或丑陋的“getter”;后者往往只是提供一种规避封装的方法。

也许您建议的方式可能是默认方式,引入私有(private)和 protected 成员和函数可能需要声明

friend class;

但是 C++ 并不是这样设计的,现在这个提议将是一个可怕的破坏性变化。尽管要恢复您的预期行为,但需要考虑的事情可能是声明

friend class = delete;

据我所知,这不会是一个重大变化。为什么不向 ISO C++ 委员会提出这种形式的建议?

关于c++ - 为什么类的私有(private)变量可以从类中的对象访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56472631/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com