1樓:匿名使用者
繼承和組合都允許由已存在的型別建立新型別,兩者都是在新型別中嵌入已存在的型別的
子物件。
區別是組合只實現了用一個也有的型別建立一個新的型別,而繼承不僅可以建立一個新的型別,還可以使用原來型別的介面。
2樓:匿名使用者
組合和繼承的共同點:
繼承和組合的使用都可以減少重複**,同時若類b是類a的內嵌物件,則b類具有a類的全部資料。
不同點:
組合是通過在其他類中定義物件來使用類中的方法和屬性,不能訪問父類的任何介面。而繼承則是從父類中得到方法和屬性,即可以得到父類的全部介面,並加以呼叫。
通過組合生成的類和被組合的類之間的邏輯關係:組合生成的類具有被組合類的全部內容,但是並不包括被組合類的全部介面,就是通過被組合的類的物件只能訪問組合類的成員函式,但不能直接訪問到被組合類的成員函式。
繼承類與基類的邏輯關係:即通過派生類的物件不但可以訪問派生類的成員函式,也能訪問基類的成員函式,派生類是可以完全繼承基類的任何內容的包括全部介面。
c++中的繼承和組合有 什麼區別和相同的! 5
3樓:匿名使用者
類中的資料成員變成另外一個類的物件的時候,就是類的組合.
也就是說用一個類的物件作為另一個類的成員的時候,就是類的組合
而繼承 是有許可權的
1. 公有繼承(public)
公有繼承的特點是基類的公有成員和保護成員作為派生類的成員時,它們都保持原有的狀態,而基類的私有成員仍然是私有的。
2. 私有繼承(private)
私有繼承的特點是基類的公有成員和保護成員都作為派生類的私有成員,並且不能被這個派生類的子類所訪問。
3. 保護繼承(protected)
保護繼承的特點是基類的所有公有成員和保護成員都成為派生類的保護成員,並且只能被它的派生類成員函式或友元訪問,基類的私有成員仍然是私有的。
假設a是基類,b是a的派生類,c是b的派生類
假設b公有繼承於a,c公有繼承於b,則
b可訪問a的公有,保護類成員,但不可訪問a的私有成員(所以繼承方式,派生類均不可訪問父類的私有成員,以下不再重複說明)
c可訪問a的公有,保護類成員
假設b保護繼承於a,c公有保護於b,則
b可訪問a的公有,保護類成員,
c可以訪問a的公有,保護類成員
假設b私有繼承於a,c公有保護於b,則
b可訪問a的公有,保護類成員,
c不可訪問a的所有成員
不知道這麼說你能明白嗎 謝謝!
4樓:匿名使用者
繼承 和 組合。
繼承 黑馬是馬
組合 手機和耳機。
都為實現系統功能重用,**複用的常用技巧,都是在設計模式中的基礎結構
5樓:爪抽
組合?什麼是組合 啊?
6樓:風丁慶旭
我自己總結過,書上也有:共有繼承:1
共有繼承不改變基類成員在派生類中的訪問許可權。在共有繼承下,基類的public成員,protect成員,private成員在派生類中保持它們在基類中相同的訪問許可權。2
在派生類中定義的成員函式不能直接訪問基類的私有成員,只能通過public或protect成員函式訪問。私有繼承:1
基類的private和protect都在派生類中變成了private成員,不能被派生類的外部函式訪問。2
派生類的成員函式不能訪問基類的private成員,但可以訪問基類的public和protect成員,並通過它們訪問基類private成員。
7樓:戰瑋鄂浩歌
繼承是面嚮物件語言的重要機制。它可以建立在一般類的基礎上。繼承和派生實際上是同一回事,但引數不同,例如:子類繼承父類,父類派生類。
c++中,類的繼承有哪些型別,其之間有什麼區別?
8樓:匿名使用者
一,c++中,類的常用的繼承方式有三種,分別是:公有繼承(public)、私有繼承(private)、保護繼承(protected);
二,三者之間的區別:
1,公有繼承時,水平訪問和垂直訪問對基類中的公有成員不受限制;
2,私有繼承時,水平訪問和垂直訪問對基類中的公有成員也不能訪問;
3,保護繼承時,對於垂直訪問同於公有繼承,對於水平訪問同於私有繼承;
4,對於基類中的私有成員,只能被基類中的成員函式和友元函式所訪問,不能被其他的函式訪問。
9樓:匿名使用者
有三種繼承方式:
public protected private。
他們的不同之處在與子類以以上三種方式之一實現繼承時,父類的成員對外界來講,訪問屬性有所不同。
public繼承,父類的成員訪問屬性不變。
protected繼承,父類中public成員變為protected屬性,其它成員的訪問許可權不變。
private繼承,使得基類所有成員在子類中的訪問許可權變為private。
10樓:匿名使用者
public、protected、privatepublic:父類的訪問許可權不變,即public->public protected->protected private->private
protected:父類的public變為protected,其他不變,即public->protected protected->protected private->private
private:父類的public和protected變為private,即public->private protected->private private->private
求解 c++中三種繼承方式的區別!
11樓:匿名使用者
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在類外就沒有了可以引用的繼承過來成員了!
//這些繼承方式是很難理解的.最好的辦法就是多寫**去試.
12樓:二天有
公用(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 類的虛繼承到底從父類那繼承了什麼
虛繼承不管父類派生出多少個子類在記憶體總只存在一套資料,但是一般繼承會存在與派生類個數對應的n個資料 n為派生類個數 c 中的類繼承究竟有什麼作用?繼承能體現事物的普遍性和特殊性。這是c 物件導向程式設計的一個重要概念,繼承可以使 得到重用,子類還可以在父類的基礎上新增功能。對於通明函式,如果不是虛...
C 類的公有繼承,基類的私有成員在派生類中不可見或不可訪問
在c 語言中,一個派生類可以從一個基類派生,也可以從多個基類派生。從一個基類派生的繼承稱為單繼承 從多個基類派生的繼承稱為多繼承。方式如下 公有繼承 public 私有繼承 private 保護繼承 protected 是常用的三種繼承方式。1.公有繼承 public 公有繼承的特點是基類的公有成員...
java中類與類之間的關係
類與類之間最常見的關係主 要有三種 依賴 uses a 聚合 has a 和繼承 is a 依賴 uses a 依賴關係是類中最常見的關係,例如訂單類 order 需要訪問使用者賬戶類 account 所以在訂單類中需要引用賬戶類,即訂單類依賴賬戶類,但圖書類不需要依賴賬戶類。如果修改賬戶類,會影響...