簡體   English   中英

與復制構造函數和私有成員的混淆

[英]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 ,我的問題是關於拷貝構造函數里面,我們為什么不能訪問私有成員numtest使用num初始化num在副本? 令我感到困惑的是,如果您鍵入cout<<test.num<<endl ,那當然是錯誤的,因為您正試圖訪問私有num ,但是如果您通過引用將測試傳遞給副本構造函數,則它可以工作,可以有人告訴我這是怎么回事嗎?

私有成員是類本身的私有成員,而不是類的實例。

訪問限制是按類而不是按對象的。

“私有”的意思是-只能從同一類中訪問。

“受保護”的意思是-可以從同一類內部訪問,也可以從派生類內部訪問(在派生類中,受保護的非靜態成員只能通過具有派生類類型的變量進行訪問)。

“公開”的意思是-任何東西都可以訪問。

訪問限制的點是限制必須檢查的代碼區域,以便了解使用值的位置,而不是阻止代碼使用這些值。

private並不意味着對象實例是私有的。 這意味着該階層的私人。 T的實例可以訪問其他實例T私有成員。 類似地,類T的靜態方法可以訪問T實例的私有成員。

如果private訪問限制為僅訪問單個實例,則它將使對象不可復制,因為正如您所指出的那樣,復制構造函數將無法從原始實例讀取數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM