《C++ Primer 4th》物件導向編程讀書筆記---protected成員

來源:互聯網
上載者:User

好久沒看C++的基礎性的知識了,很多東西都忘了。今天在其它地方看到關於C++類protected的地方不太記得。翻了一下《C++ Primer 4th》,發現迷惑的地方更多了,真的是能力渣渣的啊,基礎真的不行。

------------------分割線---------------------

類設計與受保護的成員
如果沒有繼承,類只有兩種使用者:類本身的成員和該類的使用者。將類劃分為private 和 public 存取層級反映了使用者種類的這一分隔:使用者(使用這個類的程式,包括類對象)只能訪問public介面,類成員和友元既可以訪問public成員也可以訪問private成員。
有了繼承,就有了類的第三種使用者:從類派生定義新類的程式員(衍生類別)。衍生類別的提供者通常(但並不總是)需要訪問(一般為private的)基類實現,為了允許這種訪問而仍然禁止對實現的一般訪問,提供了附加的protected訪問標號。類的protected部分仍然不能被一般程式員(使用這個類的使用者)訪問,但可以被衍生類別訪問。只有類本身和友元可以訪問基類的private部分,衍生類別不能訪問基類的private成員。
定義類充當基類時,將成員設計為public的標準並沒有改變:仍然是介面函數應該為public而資料一般不應為public。被繼承的類必須決定實現的哪些部分聲明為protected而哪些部分聲明為private。希望禁止衍生類別訪問的成員應該設為private,提供衍生類別實現所需操作或資料的成員應設為protected。換句話說,提供給衍生類別型的介面是protected成員和public成員的組合。


protected成員

可以認為protected訪問標號中private和public的混合。

1、像private成員一樣,protected成員不能被類的使用者訪問。

2、像public成員一樣,protected成員可被該類的衍生類別訪問。

此外,protected還有另一重要性質。

衍生類別可以通過衍生類別對象訪問基類的protected成員,衍生類別對其基類類型對象的protected成員沒有特殊存取權限。

配上代碼理解大概就是如下(原代碼連結:http://blog.csdn.net/luoruiyi2008/article/details/7179788) :

#include <iostream>using std::cout ;using std::endl ;class Base{public:Base(){};virtual ~Base(){};protected:int int_pro;} ;class A : public Base{public:A(){};A(int da){int_pro = da;} //衍生類別(A)可以直接存取基類(Base)的protected成員(int_pro)void Print(A &obj){obj.int_pro = 24;} //衍生類別對象(obj)可以訪問基類的protected成員(int_pro)void PrintPro(){cout << "The proteted data is " << int_pro <<endl;} //衍生類別(A)可以直接存取基類(Base)的protected成員(int_pro)void PrintBasePro(Base &obj){cout << "The protected data is " << obj.int_pro << endl ;} //衍生類別(A)對基類類型對象(obj)protected成員(int_prot)沒有特殊存取權限,因此加上此句,代碼編譯不通過。} ;int main(void){A aObj;A aObj2(5);aObj2.PrintPro();aObj.Print(aObj2);aObj2.PrintPro();return 0 ;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.