为什么在将对象传递给方法时可以访问私有数据成员?[复制]

why is it possible to access private data members when passing an object to a method? [duplicate]

提问人:Mohammed Amer 提问时间:3/7/2023 更新时间:3/7/2023 访问量:65

问:

#include <iostream>
using std::cout;

class distance {
private :
   int feet;
   int inches;
public :
   void setfeet(int x) { feet = x; }
   int getfeet(void) { return feet; }
   void setinches(int y) { inches = y; }
   int getinches(void) { return inches; }
   distance add(distance temp) {
       distance result(0, 0);
       result.feet = feet + temp.feet;
       result.inches = inches + temp.inches;
       return result;
 }
    distance(int ft, int in) : feet(ft), inches(in) {}

};

int main(void)
{
    distance a(5, 6);
    distance b(3, 4);
    distance sum(a.add(b));
    cout << sum.getfeet() <<"\n";
    cout << sum.getinches() << "\n";
    return 0;

}

在此代码示例中,我可以访问在方法 add 中创建的结果对象的私有数据成员,还可以使用 dot(.) 运算符访问对象 temp 的私有数据成员,该成员是 add 方法中的参数 这怎么可能?

C++ OOP 方法

评论

2赞 Yksisarvinen 3/7/2023
private适用于整个类,而不是单个对象(类的实例)。查看链接的重复项。
5赞 AndyG 3/7/2023
相同类型的实例只需访问彼此的私有成员。当您考虑复制/移动操作之类的事情时,这是有道理的。
1赞 Nate Eldredge 3/7/2023
允许类的成员函数访问该类类型的所有对象的私有数据成员,而不仅仅是调用该对象的专用数据成员。this
0赞 JohnFilleau 3/7/2023
访问说明符 (, , ) 的目的是提供封装。它不是为了安全或隐私。publicprotectedprivate
0赞 Caleth 3/7/2023
@AndyG或任何二进制运算符

答: 暂无答案