C 中。public,private,protected,用哪種繼承方式好

2021-05-22 11:12:13 字數 3435 閱讀 1983

1樓:匿名使用者

public公有繼承

private私有繼承

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

公有繼承時,基類的private成員派生類也不可用,基類的public和protected成員在派生類中可直接使用.繼承過來(變成派生類相應的public和protected成員)只有public成員在派生類外可以直接使用.

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

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

舉個例子.

class a

;class b:public a

void setage(int nage)

void setmoney(int nmoney)

};b objb;//建立b類的物件objb

objb.m_ntelnum=123456;//可以

objb.m_nage=30;//錯誤.public繼承中基類的protected在派生類中是protected

objb.m_nmoney=100;//更錯誤,在派生類中都不可以直接使用.在類外就更不能了.

class c:protected a

void setage(int nage)

void setmoney(int nmoney)

};c objc;//建立c類的物件objc

objc.m_ntelnum=123456;//注意這裡和public的區別,這裡錯誤,m_ntelnum變成了c類的protected成員

objc.m_nage=30;//錯誤.protected繼承中基類的protected在派生類中是protected,這與public同相

objc.m_nmoney=100;//更錯誤,在派生類中都不可以直接使用.在類外就更不能了.

class d:private a

void setage(int nage)

void setmoney(int nmoney)

};d objd;//建立d類的物件objd

objd.m_ntelnum=123456;//錯誤,m_ntelnum變成了d類的private成員

objd.m_nage=30;//錯誤.private繼承中基類的protected在派生類中是private

objd.m_nmoney=100;//更錯誤,在派生類中都不可以直接使用.在類外就更不能了.

從例子來看,三種繼承從派生類內部引用來看好像沒有區別,只在類外引用時表現不同.現在還看不出public和protected繼承的區別

那再看一個例子.

class e:public b

void setage(int nage)

void setmoney(int nmoney)

};e obje;//

obje.m_ntelnum=123456;//可以

//其它的兩個就不能用了.

class f:public c

void setage(int nage)

void setmoney(int nmoney)

};f objf;

objf.m_ntel=123456;//錯誤,因為這是f的保護成員.注意與e類區別

class g:public d

void setage(int nage)

void setmoney(int nmoney)

};//那g在類外就沒有了可以引用的繼承過來成員了!

//這些繼承方式是很難理解的.最好的辦法就是多寫**去試.

c++類中public,private,protected的用法與區別。

2樓:匿名使用者

protected型別的訪問機制與private一樣

在基類的派生類中,可以直接訪問繼承而來的protected成員,但是不能訪問private限制的成員.所以在派生類中,可以訪問基類繼承而來的public和proected兩種型別的成員.

在public公有派生下,繼承而來的成員訪問許可權不變.protected派生下,public和protected都變成protected,private派生下,所有的繼承下來都是private了

3樓:巴霞姝雍滌

在本類中,protected與private是相同的,但protected可以被繼承,而private卻不行。

只有公有成員才能在類的外部訪問。如classa;aca;ca.a

//error

ca.b

//ok

ca.c

//error

cb.c

//error。雖然c也是b的成員,但c在被繼承的時候變成私有或者受保護的成員了。

關於c++的class中的public,protected,private;

4樓:匿名使用者

public表明該資料成員、成bai員函式du是對所有使用者zhi開放的,所有用

戶都可dao以直接進行呼叫

private表示私有

專,私有的意屬思就是class內的可以直接用,別的都不可以直接使用,相當於私有財產,只能自己使用,除了自己,都不可以使用。

protected對於子女、朋友來說,就是public的,可以自由使用,沒有任何限制,而對於其他的外部class,protected就變成private。

5、c++中繼承方式有哪幾種,各有什麼特點。 6、請描述c++中private和protected訪問的異同之處。

5樓:o默化

有三種繼

承方來式 public private protect ,源public繼承 除私有成員外的所有成員 都已public的身份出現 另外另種同理 但是都是 私有成員除外

private 和protect 的區別只有在二代繼承裡才會出現區別 private 繼承有些繼承不了 protect就都可以繼承

還是私有成員除外

c++中public、private和protected訪問屬性的區別

6樓:雲哥

在本類中,protected與private是相同的,但protected可以被繼承,而private卻不行。只有公有成員才能在類的外部訪問。版如class a;a ca;ca.

a //error

ca.b // ok

ca.c //error

cb.c //error。雖權然c也是b的成員,但c在被繼承的時候變成私有或者受保護的成員了。

c 中string陣列的問題,C 中string陣列的問題

string並不是c 的基本資料型別。它是標準庫裡宣告的一個字串類。所以樓主的答案是 可以。string str 10 定義一個字串陣列str顯示的是 i love you 還可以這樣定義字串陣列 string name 5 可以賦值啊。include include using namespace...

C中substring怎麼用的,c 中substring中怎麼擷取字串

c 中substring的用法是 public string substring int beginindex 用於返回一個新的字串,它是此字串的一個子字串。該子字串始於指定索引處的字元,一直到此字串索引末尾。在sqlserver資料庫中,用於擷取字串的某部分。sqlserver資料庫中用於擷取字串...

C中的this表示什麼意思,C中this是什麼意思

this是指bai向類或者結構體本身 du的指標,並且不可以改變。zhi this就是指向本身的dao類或結構體的專變數。如class a void fun int a cout c 中this是什麼意思?this指代的是當前上下文,this表示的物件,是這個方法活動的 上下文 所謂的 上下文 也就...