求解c中三種繼承方式的區別

2021-03-06 22:44:37 字數 3576 閱讀 5326

1樓:匿名使用者

public公有繼承

protected保護繼承

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在類外就沒有了可以引用的繼承過來成員了!

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

2樓:二天有

公用(public):訪問許可權最高;除派生類外,外部函式也可以直接訪問(無論是成員變數還是成員函式)。

私有(private):訪問許可權最低;只能是該類內部函式互相呼叫,派生類、外部函式都不能訪問。

保護(protect):訪問許可權中間;該類內部函式、派生類都能訪問,外部類、外部函式不能訪問

我們這樣來記會更加容易一些,在繼承時:

1、不管採用哪種形式(public, protected或private),基類中的私有成員都不可以被繼承;如果非要在派生類中使用基類的私有成員,可以有兩種方法:一是使用屬性,二是使用友元類或友元函式。

2、如果採用public形式,則基類除了私有成員的其它所有都被原樣的繼承到派生類中;即在基類中是public的,在派生類中還是public的,在基類中是protected的,在派生類中還是protected的。

3、如果採用protected形式,則基類中除了私有成員的其它說有都被以protected的形式繼承到派生類中。

c++中的繼承方式有:

public、private、protected三種(它們直接影響到派生類的成員、及其物件對基類成員訪問的規則)。

(1)public(公有繼承):繼承時保持基類中各成員屬性不變,並且基類中private成員被隱藏。派生類的成員只能訪問基類中的public/protected成員,而不能訪問private成員;派生類的物件只能訪問基類中的public成員。

(2)private(私有繼承):繼承時基類中各成員屬性均變為private,並且基類中private成員被隱藏。派生類的成員也只能訪問基類中的public/protected成員,而不能訪問private成員;派生類的物件不能訪問基類中的任何的成員。

(3)protected(保護性繼承):繼承時基類中各成員屬性均變為protected,並且基類中private成員被隱藏。派生類的成員只能訪問基類中的public/protected成員,而不能訪問private成員;派生類的物件不能訪問基類中的任何的成員。

c++中,比較類的三種繼承方式:共有繼承、受保護繼承、私有繼承之間的區別。

3樓:匿名使用者

在三種不同方式的繼承下,派生類對原來基類中的成員訪問的方式也不一樣,具版體如下:

1>公有繼承中:權

(1)基類的共有成員就相當於是派生類的公有成員,也就是說派生類可以像訪問自身公有成員一樣訪問從基類繼承的公有成員。

(2)基類的保護成員就相當於是派生類的保護成員,即,派生類可以像訪問自身的保護成員一樣,訪問基類的保護成員。

(3)對於基類的私有成員,派生類內部成員是無法直接訪問的,派生類使用者也無法通過派生類物件直接訪問。

2>受保護繼承中:

(1)基類的公有成員和保護成員都相當於派生類的保護成員,派生類可以通過自身的成員函式或其子類的成員函式訪問它們。

(2)對於基類的私有成員,無論派生類內部成員或派生類的物件都無法直接訪問。

3>私有繼承中:

(1)基類公有成員和受保護成員都相當於派生類的私有成員,派生類只能通過自身的成員函式訪問他們。

(2)對於基類的私有成員,無論派生類內部成員或派生類的物件都無法直接訪問。

我只給你寫了理論的區別比較,例子舉起來太麻煩,如果你覺得有必要通過例子來說明的話,我可以寫給你,你也可以拿一些不懂得問題問我。

產生靜電的方式有哪些,靜電產生的三種方式是哪些?

摩擦起電 噴射帶電。當有壓力的液體從噴嘴或管口噴出,與空氣高速摩擦,又快速分成許許多多小液滴,而成霧狀,這霧狀液滴就帶有大量靜電。液體衝擊帶電。油品由罐頂部注入槽內時,裝油的衝擊引起飛沫,汽泡和霧滴,也會造成靜電的產生。液體沉降帶電。如果純淨的油品中含有雜質或水份向下沉降時,因摩擦也將產生靜電。流體...

靜電的危害方式有以下三種型別

靜電的危害方式主要有以下三種型別 1 火災或 火災和 是靜電最大的危害。靜電電量雖然不大,但因其電壓很高而容易發生放電,產生靜電火花。在具有可燃液體的作業場所,如油品裝運場所等,可能由靜電火花引 災 在具有 性粉塵或 性氣體 蒸氣的場所,如煤粉 麵粉 鋁粉 氫氣等,可能由靜電火花引起 2 電擊。靜電...

師生溝通的三種方式中選擇哪種較好

一 學會共情,是溝通的基礎。共情就是我們常講的 心理換位 即教育者能設身處地地去體會當事人的內心感受,用別人的眼睛看世界。所以,教師面對孩子時要避免一上來就評價或講道理的習慣,要用自己的心去靠近去觸控孩子的心,設身處地地去感受他們的世界。比如,一個孩子對你說 這段時間做什麼事情都沒有興趣,上課注意力...