C++ (public, protected, private继承)
http://thinkinginmylife.spaces.live.com/blog/cns!E44140D5E07BEC07!137.entry
?
我轉(zhuǎn)~~~C++5(public, protected, private繼承)
在繼承關(guān)系中,基類的private成員不但對(duì)應(yīng)用程序隱藏,即使是派生類也是隱藏不可訪問(wèn)的,而基類的保護(hù)成員只對(duì)應(yīng)用程序隱藏,對(duì)于派生類來(lái)說(shuō)是不隱藏的,保護(hù)繼承與私有繼承在實(shí)際編程工作中使用是極其少見(jiàn)的,他們只在技術(shù)理論上有意義。
//程序作者:管寧???
//站點(diǎn):www.cndev-lab.com???
//所有稿件均有版權(quán),如要轉(zhuǎn)載,請(qǐng)務(wù)必著名出處和作者???
?
#include?<iostream>?
using?namespace?std;?
?
class?Base?
{?
????public://公有的?
????????int?a1;?
????????virtual?void?test()?=?0;?
????protected://受保護(hù)的?
????????int?a2;?
????private://私有的?
????????int?a3;?
};?
//------------------------------------------------------------------------------?
class?ProtectedClass:protected?Base//保護(hù)繼承?
{?
????public:?
????????void?test()?
????????{?
????????????a1?=?1;//a1在這里被轉(zhuǎn)變?yōu)閜rotected?
????????????a2?=?2;//a2在這里被轉(zhuǎn)變?yōu)閜rotected?
????????????//a3=3;//錯(cuò)誤,派生類不能訪問(wèn)基類的私有成員?
????????}?
};?
class?ControlProtectedClass:public?ProtectedClass//以public方式繼承ProtectedClass類?
{?
????public:?
????????void?test()?
????????{?
????????????a1?=?1;//a1在這里仍然保持為a1在這里被轉(zhuǎn)變?yōu)閜rotected?
????????????a2?=?2;//a2在這里仍然保持為a1在這里被轉(zhuǎn)變?yōu)閜rotected?
????????????//a3=3;//錯(cuò)誤,由于Base類成員為私有的,即使是上級(jí)父類是保護(hù)繼承,也不能改變Base類成員的控制類型?
????????}?
};?
//------------------------------------------------------------------------------?
class?PrivateClass:private?Base//私有繼承?
{?
????public:?
????????void?test()?
????????{?
????????????a1?=?1;//a1在這里被轉(zhuǎn)變?yōu)閜rivate?
????????????a2?=?2;//a2在這里被轉(zhuǎn)變?yōu)閜rivate?
????????????//a3=3;//錯(cuò)誤,基類私有成員對(duì)文件區(qū)域與派生類區(qū)域都是不可訪問(wèn)的?
????????}?
};?
class?ControlPrivateClass:public?PrivateClass//以public方式繼承PrivateClass類?
{?
????public:?
????????void?test()?
????????{?
????????????//a1=1;//錯(cuò)誤,由于基類PrivateClass為私有繼承,a1已經(jīng)轉(zhuǎn)變?yōu)閜rivate?
????????????//a2=2;//錯(cuò)誤,由于基類PrivateClass為私有繼承,a1已經(jīng)轉(zhuǎn)變?yōu)閜rivate?
????????????//a3=3;//錯(cuò)誤,由于Base類成員為私有的,PrivateClass類也為私有繼承?
????????}?
};?
//------------------------------------------------------------------------------?
class?PublicClass:public?Base//共有繼承有區(qū)別與其它方式的繼承,繼承后的各成員不會(huì)其改變控制方式?
{?
????public:?
????????void?test()?
????????{?
????????????a1?=?1;//a1仍然保持public?
????????????a2?=?2;//a2仍然保持protected?
????????????//a3=3;//錯(cuò)誤,派生類不能操作基類的私有成員?
????????}?
};?
class?ControlPublicClass:public?PublicClass//以public方式繼承PublicClass類?
{?
????public:?
????????void?test()?
????????{?
????????????a1?=?1;//a1仍然保持public?
????????????a2?=?2;//a2仍然保持protected?
????????????//a3=3;//錯(cuò)誤,由于Base類成員為私有成員,即使是上級(jí)父類是公有繼承,也不能改變Base類成員的控制類型?
????????}?
};?
//------------------------------------------------------------------------------?
int?main()?
{?
????system("pause");??
}
轉(zhuǎn)載于:https://www.cnblogs.com/carl2380/archive/2011/01/03/1924556.html
總結(jié)
以上是生活随笔為你收集整理的C++ (public, protected, private继承)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 邮箱服务器怎么清理缓存,如何清除Outl
- 下一篇: s3c2440移植MQTT