C++ Primer 5th笔记(chap 15 OOP)访问控制与继承
生活随笔
收集整理的這篇文章主要介紹了
C++ Primer 5th笔记(chap 15 OOP)访问控制与继承
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1. 用戶和類的實(shí)現(xiàn)者
用戶:指類的對(duì)象或?qū)嵗?br /> 類的實(shí)現(xiàn)者:包括類的成員。
2. private、public、protect成員
2.1派生類可以訪問公有public成員,而不能訪問私有private成員
2.2 protect成員
希望派生類分享但是不想被其他公共訪問使用的成員。
- 可以看做是public和private中的產(chǎn)物。
- 受保護(hù)的成員對(duì)類的用戶來說是不可訪問的。
- 受保護(hù)的成員對(duì)于派生類的成員和友元來說是可訪問的。
3. 派生訪問說明符
- 對(duì)于派生類的成員(及友元)能否訪問其直接積累的成員沒什么影響。eg. private 不影響派生類的訪問權(quán)限,主要影響,相關(guān)函數(shù)的使用。
- 主要用來控制派生類用戶對(duì)于基類成員的訪問權(quán)限。比如struct Priv_Drev: private Base{}意味著在派生類Priv_Drev中,從Base繼承而來的部分都是private的。
3.1 說明符可以控制繼承自派生類的新類的訪問權(quán)限
struct Derived_from_public : public Pub_Derv {int use_base() { return prot_mem; } //ok:protected in pub_Derv };struct Derived_from_private : public Priv_Derv {int use_base(){return prot_mem;} // error:這里prot_mem是private類型 };3.2 派生類向基類轉(zhuǎn)換的可訪問性
假設(shè)D繼承自B,
- 只有當(dāng)D公有地繼承B時(shí),用戶代碼才能夠使用派生類向基類的轉(zhuǎn)換;如果D繼承B的方式是保護(hù)的或者私有的,則用戶代碼不能使用該轉(zhuǎn)換。
- 不論D以什么方式繼承B,D的成員函數(shù)和友元都能使用派生類向基類的的轉(zhuǎn)換;派生類向其會(huì)直接基類的類型轉(zhuǎn)換對(duì)于派生類的成員和友元來說是永遠(yuǎn)可以訪問的。
- 如果D繼承B的方式是公有的或者受保護(hù)的,則D的派生類的成員和友元可以使用D向B的類型轉(zhuǎn)換;反之,如果D繼承B的方式是私有的,則不能使用
- 對(duì)于代碼中的某個(gè)給定節(jié)點(diǎn)來說,如果基類的公有成員是可以訪問的,則派生類向基類的類型轉(zhuǎn)換也是可訪問的;反之則不行。
4. 友元與繼承
4.1 友元關(guān)系不能傳遞
如果windows_mgr有它自己的友元,那么這些友元并不一定具有訪問Screen的特權(quán)。
class Screen{friend class windows_mgr; };4.2. 友元關(guān)系不能繼承(每個(gè)類負(fù)責(zé)控制各自成員的訪問權(quán)限)
class Base{friend class Pal; protected:int prot_mem; //protected 成員 }; class Sneaky:public Base{friend void clobber(Sneaky&); //能訪問Sneaky::prot_memfriend void clobber(Base&); //不能訪問Base::prot_memint j; } class Pal { public:int f(Base2 b) {return b.prot_mem;} // int f2(Sneaky s) {return s.j;} error:Pal 不是Sneaky的友元int f3(Sneaky2 s2) {return s2.prot_mem;} //不要驚訝,這是對(duì)的 }; class D2 : public Pal { public: // int mem(Base2 b){return b.prot_mem;} error: 友元是無法繼承的!!! };5. using改變個(gè)別成員的可訪問性
通過using聲明可以改變派生類繼承的某個(gè)名字的訪問級(jí)別。
- private using 該名字能被類的成員和友元訪問;
- public using 類的所有成員都能訪問。
- protectde using 類的成員、友元和派生類是可訪問的。
6. 默認(rèn)的繼承保護(hù)級(jí)別
使用class關(guān)鍵字定義的派生類是私有繼承的;使用struct關(guān)鍵字定義的派生類是公有繼承的。
【引用】
[1] 代碼oopTest.h
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 15 OOP)访问控制与继承的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ Primer 5th笔记(cha
- 下一篇: Bitcoin 地址原理(2)私钥、公钥