日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

protect 继承_(转)public、protect、private继承方式 C++

發(fā)布時(shí)間:2023/12/1 c/c++ 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 protect 继承_(转)public、protect、private继承方式 C++ 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

C里面的結(jié)構(gòu)體內(nèi)的成員不受任何機(jī)制保護(hù),直接能用,比如StructtypeA.x;StructtypeA.y;StructtypeA.fun();

而c++則不同,c++的類像強(qiáng)化型的結(jié)構(gòu)體

public公有繼承

protected保護(hù)繼承

private私有繼承

我們知道類的private和protected成員,在類外是不可以使用的.只有public成員可以在類外直接使用.

公有繼承時(shí),基類的private成員派生類也不可用,基類的public和protected成員在派生類中可直接使用.繼承過(guò)來(lái)(變成派生類相應(yīng)的public和protected成員)只有public成員在派生類外可以直接使用.

保護(hù)繼承時(shí),基類的private成員仍為有私有.基類的public和protected成員變成派生類的protected成員,這時(shí)在派生類外也不能直接使用原基類的public成員

私有繼承時(shí),基類的private成員仍為有私有.基類的public和protected成員將變成派生類的private成員.

舉個(gè)例子.

class A

{

public:int m_nTelNum;

protected:int m_nAge;

private:int m_nMoney;

};

class B : public A

{

void SetTelNum(int nTelNum)

{ m_nTelNum=nTelNum; }

void SetAge(int nAge)

{ m_nAge=nAge; }

void SetMoney(int nMoney)

{ m_nMoney=nMoney; }

//這里就出現(xiàn)錯(cuò)誤,因?yàn)榛惖膒rivate成員不能用.

};

B objB;//創(chuàng)建B類的對(duì)象objB

objB.m_nTelNum=123456;//可以

objB.m_nAge=30;//錯(cuò)誤.

public繼承中基類的protected在派生類中是protected

objB.m_nMoney=100;//更錯(cuò)誤,在派生類中都不可以直接使用.在類外就更不能了.

class C : protected A

{

void SetTelNum(int nTelNum)

{ m_nTelNum=nTelNum; }

void SetAge(int nAge)

{ m_nAge=nAge; }

void SetMoney(int nMoney)

{ m_nMoney=nMoney; }

//這里就出現(xiàn)錯(cuò)誤,因?yàn)檫@是基類的private成員不能用.

};

C objC;//創(chuàng)建C類的對(duì)象objC

objC.m_nTelNum=123456;//注意這里和public的區(qū)別,這里錯(cuò)誤,m_nTelNum變成了C類的protected成員

objC.m_nAge=30;//錯(cuò)誤.protected繼承中基類的protected在派生類中是protected,這與public同相

objC.m_nMoney=100;//更錯(cuò)誤,在派生類中都不可以直接使用.在類外就更不能了.

class D : private A

{

void SetTelNum(int nTelNum)

{ m_nTelNum=nTelNum; }

void SetAge(int nAge)

{ m_nAge=nAge; }

void SetMoney(int nMoney)

{ m_nMoney=nMoney;

//這里就出現(xiàn)錯(cuò)誤,因?yàn)檫@是基類的private成員不能用.

} };

D objD;//創(chuàng)建D類的對(duì)象

objD objD.m_nTelNum=123456;//錯(cuò)誤,m_nTelNum變成了D類的private成員

objD.m_nAge=30;//錯(cuò)誤.private繼承中基類的protected在派生類中是private

objD.m_nMoney=100;//更錯(cuò)誤,在派生類中都不可以直接使用.在類外就更不能了.

從例子來(lái)看,三種繼承從派生類內(nèi)部引用來(lái)看好像沒(méi)有區(qū)別,只在類外引用時(shí)表現(xiàn)不同.現(xiàn)在還看不出public和protected繼承的區(qū)別那再看一個(gè)例子.

class E:public B

{

void SetTelNum(int nTelNum)

{ m_nTelNum=nTelNum;//可以因?yàn)檫@是B的公有成員} void SetAge(int nAge)

{ m_nAge=nAge;//可以因?yàn)檫@是B的保護(hù)成員,現(xiàn)成變成E的protected成員}

void SetMoney(int nMoney) { m_nMoney=nMoney;//這個(gè)肯定不可以! } };

E objE;

objE.m_nTelNum=123456;//可以

//其它的兩個(gè)就不能用了.

class F:public C

{ void SetTelNum(int nTelNum)

{ m_nTelNum=nTelNum;//可以因?yàn)檫@是C的保護(hù)成員,這里與public繼承已經(jīng)有區(qū)別但還沒(méi)有表現(xiàn)出來(lái)}

void SetAge(int nAge) {

m_nAge=nAge;//可以因?yàn)檫@是C的保護(hù)成員,現(xiàn)成變成E的protected成員}

void SetMoney(int nMoney)

{ m_nMoney=nMoney;//這個(gè)肯定不可以! } };

F objF;

objF.m_nTel=123456;//錯(cuò)誤,因?yàn)檫@是F的保護(hù)成員.注意與E類區(qū)別

class G : public D

{

void SetTelNum(int nTelNum)

{ m_nTelNum=nTelNum;//不可以因?yàn)檫@是D的private成員,注意這里區(qū)別}

void SetAge(int nAge)

{ m_nAge=nAge;//不可以因?yàn)檫@是D的private成員,注意區(qū)別}

void SetMoney(int nMoney)

總結(jié)

以上是生活随笔為你收集整理的protect 继承_(转)public、protect、private继承方式 C++的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。