C (11) 包含和繼承關係

2021-10-14 12:52:13 字數 1490 閱讀 3413

一、包含關係

當乙個類構建的物件為另乙個類的成員物件時:

當乙個型別包含另乙個物件時,本類沒有構造,析構,拷貝,賦值,但成員類有這些函式,本類就可以進行自己的合成因此來調動成員物件的函式。要和成員物件的行為保持一致。

class object

~object()

object(const object& obj) :value(obj.value)

object& operator=(const object& obj)

cout << "object::賦值" << this << endl;

return *this;

}};class base

~base()

base(const base& base) :num(base.num),obj(base.obj)

base& operator=(const base& base)

cout << "base::賦值" << this << endl;

return *this;

}};int main()

二、繼承關係

當乙個類繼承另乙個類時:

拷貝構造:

①無論基類寫或不寫拷貝或賦值函式,子類沒寫時都會進行合成,(注意若子類寫了拷貝函式,在呼叫基類的拷貝構造,要寫明(object(base)))

②基類沒有拷貝函式,子類有拷貝函式。不可以讓父進行合成,只能調動建構函式來建立base2的隱藏父物件。

即:對於拷貝建構函式來說,基類可以約束子類進行合成,反過來,子類不能約束基類進行合成

賦值函式

①基類沒有,子類也沒有:正常賦值,將base1的值全部給base3。

②基類沒有,子類有:只能賦值子物件的成員屬性。

③基類有,子類沒有:會約束子類產生賦值語句,正常賦值,基類和父類物件的屬性都會賦值。

④基類有,子類也有:子類的賦值語句無法調動父類的賦值語句,只能賦值子物件的成員屬性。

class object

~object()

object(const object& obj) :value(obj.value)

object& operator=(const object& obj)

cout << "object::賦值" << this << endl;

return *this;

}};class base:public object

~base()

base(const base& base) :num(base.num),object(base)

base& operator=(const base& base)

cout << "base::賦值" << this << endl;

return *this;

}};int main()

c 11 繼承構造

define crt secure no warnings include include include include c 11允許派生類繼承基類的建構函式 預設建構函式 複製建構函式 移動建構函式除外 注意 繼承的建構函式只能初始化基類中的成員變數,不能初始化派生類的成員變數 如果基類的建構函...

C 11包擴充套件

c 11的包擴充套件,記錄一下 吧,採用萬能引用,萬能引用再配合std forward又是完美 我個人還是覺得能清晰表達 盡量不要用這麼奇奇怪怪的語句吧?完美 可以考慮,確實降低的拷貝的成本。今天在github看乙個人執行緒池的demo,發現他的執行緒池裡充滿了這些奇奇怪怪的寫法,明明是乙個普普通通...

C 11 繼承建構函式

繼承建構函式 基類有多個不同版本的建構函式,子類必須對應建構函式來進行 透傳 如 class base base double d,int i void fun float d class derived public base derived double d,int i base d,i voi...