描述你的问题
为什么下面的这段代码里面,类的拷贝函数中的参数,是Base类的一个引用,Base类声明有一个私有的数据成员num,为什么拷贝函数中,x可以直接访问x的私有数据成员num。如果在main函数里面声明一个Base 类的对象,如Base test; 不可能直接test.num调用这个数据成员啊?为什么在类里面却又可以啊?
贴上相关代码
`#include <iostream>
class Base
{
private:
int num;
public:
Base(int tmp = 0) : num(tmp) {}
const Base& operator=(const Base& tmp)
{
num = tmp.num;
return *this;
}
};
int main()
{
return 0;
}`
贴上报错信息
贴上相关截图
已经尝试过哪些方法仍然没解决(附上相关链接)
你可以认为这个是约定好的特例:拷贝构造函数属于这个类的成员函数,能访问参数对象的私有成员也可以理解。
从语言设计上来说,怎么设计都可以。但是如果设计成不能访问,那就必须把内部成员暴露出来(成员public或者提供get函数),这不是个好的选择。
因为访问权限是在类层次上的,而不是对象层次上的
拷贝函数的调用对象和拷贝函数参数的对象依然可以访问它们之间的private函数