[英]Confusion with copy constructor and private member
假設我有以下課程:
class Test
{
int num;
public:
Test(int x):num(x){}
Test(const Test &rhs):num(rhs.num+1){}
};
int main()
{
Test test(10);
Test copy = test;
}
該num
在副本應該是11
,我的問題是關於拷貝構造函數里面,我們為什么不能訪問私有成員num
的test
使用num
初始化num
在副本? 令我感到困惑的是,如果您鍵入cout<<test.num<<endl
,那當然是錯誤的,因為您正試圖訪問私有num
,但是如果您通過引用將測試傳遞給副本構造函數,則它可以工作,可以有人告訴我這是怎么回事嗎?
私有成員是類本身的私有成員,而不是類的實例。
訪問限制是按類而不是按對象的。
“私有”的意思是-只能從同一類中訪問。
“受保護”的意思是-可以從同一類內部訪問,也可以從派生類內部訪問(在派生類中,受保護的非靜態成員只能通過具有派生類類型的變量進行訪問)。
“公開”的意思是-任何東西都可以訪問。
訪問限制的點是限制必須檢查的代碼區域,以便了解使用值的位置,而不是阻止代碼使用這些值。
private
並不意味着對象實例是私有的。 這意味着該階層的私人。 類T
的實例可以訪問其他實例T
私有成員。 類似地,類T
的靜態方法可以訪問T
實例的私有成員。
如果private
訪問限制為僅訪問單個實例,則它將使對象不可復制,因為正如您所指出的那樣,復制構造函數將無法從原始實例讀取數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.