为何在类成员方法中可访问同类对象的private数据成员?
问题解答
先看你提供的代码:
#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; }
为什么成员函数能访问同类型其他对象的私有成员?
C++的访问控制(public/private/protected)是基于类而非基于对象的。核心规则是:
- 类的任意成员函数,都有权访问该类所有对象的私有成员——不管这个对象是当前函数所属的实例(比如
add里的feet等价于this->feet)、函数内部创建的局部对象(result),还是作为参数传入的对象(temp)。 - 私有权限的作用是限制类外部代码直接访问成员,而类自身的成员函数属于类的内部范畴,完全不受这个限制。
打个比方:就像同一家公司的员工,能访问公司内部的所有资源,不管是自己工位的、同事工位的还是新配置的工位——因为大家都属于同一个“类”(公司)的内部成员。
内容的提问来源于stack exchange,提问作者Mohammed Amer
相关产品推荐
相关产品推荐

