C 組合 與 派生

2021-09-07 09:55:46 字數 2086 閱讀 5886

"組合"通常在希望新類有老類功能的時候使用,但是又不希望使用老類的介面。

▶ 【 簡單的例子 】

#include

using namespace std;

class p

};class company

};int main()

這裡的p類就好比是你,你擁有著自己獨特的一門技術 my_special_talent(),然後畢業了你找到了乙份滿意的工作。

而類company就是你將要上班工作的公司,緊接著進入公司後你的技術被公司吸收了:

你的技術很好,大家都知道能夠它能夠高效地解決這一類的問題,所以以後公司一旦有這一類的問題,就直接交給你了,但也沒人問你是怎麼完成的,只要你完成就好了。

(這個時候類p的介面已經被重新封裝了(本來屬於你的技能,現在已經屬於公司了))

當其他外界的人有這類問題的時候,那直接找這家公司就可以了,然後公司的聲譽越來越高。然而當有乙個更好的技術出現,你的技能(函式介面)也將再次被替換掉,你也就被炒魷魚了。

"派生"是既希望使用老類的功能,也希望使用老類的介面:▶ 【 簡單的例子 】

#include

using namespace std;

class parents

};class p:public parents ;

int main()

這裡的p類還是你,只不過這個你年齡還很小,什麼都不知道(那個時候你的p類裡面什麼都沒有);

然後你父母開始將他們所有的愛與經驗都一點點教給你,你於是也就獲得了新的 "public繼承屬性",但是這些知識終究沒有成為你自己的,因為那時的你還小還體會不到那些到底有什麼用,但是聰明的你卻把它記在了心底。

多年之後,你的專業知識越來越多(你的p類的函式越來越多),但當你真正遇到以前不理解的那些挫折的時候,你才會發現你父母以前教給你的都是有用的。

在組合類自己的建構函式被呼叫之前,會首先呼叫成員類的拷貝建構函式來初始化成員類,有幾個成員類就呼叫幾次拷貝建構函式;

在組合類的建構函式中如果形參是物件,就會再次呼叫成員類的拷貝建構函式來例項化形參,這裡例項化出來的形參會被在該組合類初始化結束的時候呼叫成員類的析構函式將其析構掉。

在形參例項化之後會呼叫組合類自己的建構函式進行例項化組合類自己。

<1> 原始碼

#include using namespace std;

class point

point(point &p);

~point()

private:

int x, y;

};point::point(point &p)

class line

line(point pp1, point pp2);//line建構函式

line(line &l);//line拷貝建構函式

~line()

private:

point p1, p2;

double len;

};line::line(point pp1, point pp2) : p1(pp1), p2(pp2)//組合類建構函式初始化

line::line(line &l) : p1(l.p1), p2(l.p2)

int main(int argc, char *ar**)

<2>執行結果

<3>分析

① 析構函式和上方的建構函式執行的順序是相反的(和棧類似)

② 形參在構造被例項化之後,就會在該類初始化結束的時候被釋放,只會釋放例項化出來的形參物件

C 繼承與派生

派生新類 吸收已有類的成員 調整已有類成員和新增新的成員 class 派生類名 繼承方式 基類名1,繼承方式 基類名2,派生類成員宣告 繼承方式有 public protected private 預設 公有繼承 基類的公有和保護乘員的訪問屬性在派生類中不變,基類的私有成員不能直接訪問 型別相容規則...

c 繼承與派生

繼承 與派生 一 派生方式的不同的表現 1 派生類在類內成員對基類成員 的訪問許可權 2 派生類的物件對基類成員的訪問許可權。二 公有繼承 1 基類protected和public的成員在派生類中訪問屬性保持不變 2 基類的private成員在派生類中不可訪問。3 派生類的成員 即派生類內 可以直接...

c 繼承與派生

一 基本概念 1 類的繼承,是新的類從已有類那裡得到已有的特性。或從已有類產生新類的過程就是類的派生。原有的類稱為基類或父類,產生的新類稱為派生類或子類。2 派生類的宣告 class 派生類名 繼承方式 基類名1,繼承方式 基類名2,繼承方式 基類名n 3 乙個派生類可以同時有多個基類,這種情況稱為...