描述你的问题
如下面的这段代码所示,为什么在Base这个类里面,它的拷贝函数,有个Base类的参数,为什么在拷贝函数里面,Base这个类的引用对象tmp,可以直接访问私有数据成员num,不是访问权限标志位private的,就只能被友元和成员函数访问吗?为什么可以直接在拷贝函数里面写tmp.num。这样的语句啊!如果放在main函数里面,声明一个Base类的对象,是不能访问私有数据成员的啊!
贴上相关代码
#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;
}
贴上报错信息
贴上相关截图
已经尝试过哪些方法仍然没解决(附上相关链接)
自己的成員自己的函數當然可以存取
你自己都說了、、、
這個
const Base& operator=(const Base& tmp)
函數就是Base類別的成員函數啊。 。 。類別內的成員自然可以訪問,主要是分清類別和物件。
個人覺得可以這樣理解:一個類別是自己的友元類別(friend class)。
具體來說,
Base
類別是自己的友元,而友元是可以存取類別的私有成員的。在Base
類別的成員-拷貝賦值運算子裡,tmp
物件的型別是Base
,而Base
是Base
的友元,所以可以透過tmp
物件存取Base
類私有成員num
,同理,也可以透過this
指標隱式存取Base
類別私有成員num
。另外,拷貝賦值運算子的回傳值一般不應該是常數引用類型的。