C 快速入門 9 繼承

2021-08-16 22:05:25 字數 2956 閱讀 1360

如果我們希望某乙個類能直接使用另乙個類的屬性和方法,那麼這時候就可以用到繼承,那麼如果使用繼承呢?

class a;

class b : public a;

這樣,我們就能在b中直接使用a中的屬性和方法了,但是值得注意的是,如果a類中的成員變數是private定義的,在b類中還是使用不了

在c++中我們可以使用private繼承 protected繼承 以及 public繼承,用的較多的是public繼承

private的意思是,只能在本類中使用,不能再其他任何類中使用,當然友元類除外

pretected的意思是,只能在本類和本類的子類中使用,同樣的,友元類除外

public的意思是,能在本類和其他類中使用

當然繼承也能擁有上面三種方式,以下為父類中的修飾符+繼承關係得到的屬性關係

private與任何修飾符都是private

protected與public組合成protected

public與任何修飾符組合都是該修飾符自身

class a;

class b:public a

};class c:private a

};class d:protected a

}

在企業開發中一般使用的最多的是public繼承,注意上面d繼承a的時候,protected與public組合之後,是protected,只能在子類中使用,還是可以在d中使用的。private繼承,之後,自身類變成了private,

b繼承a之後,可以使用a指標,指向b物件,同樣的可以使用a的引用引用b物件,在b中可以使用a中的方法。

class a

void parse2(a * a)

int main()

建構函式與析構函式的次序問題,當b繼承a的時候,先呼叫的是a的建構函式,聽過b的建構函式來初始化b。

class a

~a()

};class b :public a

~b()

private:

a a1;

a a2;

};class c :public b

~c()

private:

a a1;

a a2;

};int main()

列印為

1我是a類的建構函式

2我是a類的建構函式

3我是a類的建構函式

我是b類建構函式

4我是a類的建構函式

5我是a類的建構函式

我是c類的建構函式

析構順序則完全相反

當子類重寫了父類的成員的時候,這時候,預設先呼叫的是子類的成員函式和屬性

class a 

};class b : public a

};int main()

從該案例可以看出,如果想使用父類的成員屬性和函式,那麼只需要使用物件.類名::屬性

通過static關鍵字定義的變數必須初始化,而且應該在類外部初始化

class

a;int a::a = 1;//初始化

int main()

值得注意的是,a必須在外部初始化。當然如果被修飾成全域性常量,那麼就可以直接在類的內部初始化。

多繼承,也就是當乙個物件需要使用多個物件的屬性和方法的時候,我們可以通過多繼承來實現,多繼承的語法極其簡單,就是在繼承的類後面加『,』號隔開就行。還是通過案例來展示多繼承的語法。

class a
多繼承的二義性,如果a1,a2繼承a同時b繼承a1,a2,這時候,如果a中存在乙個屬性,那麼當b類使用a類中的屬性的時候,這時候,編譯器不知道這個a屬性是來自於a1還是a2,這時候就產生了多繼承的二義性。

class a ;

class b1 :public a;

class b2 :public a ;

class c :public b1,public b2 ;

int main()

發現以上在使用c.a的時候,編譯器報錯為使用不明確,當我們如果加上virtual關鍵字的時候,發現能解決這一問題,但是通過sizeof列印之後,發現類的體積比原來更大了。

class a ;

class b1 :virtual

public a;

class b2 :virtual

public a ;

class c :public b1,public b2 ;

int main()

而使用virtual關鍵字並不能解決多繼承的全部問題,當c繼承於a,b,ab中含名字相同的乙個屬性,當使用這個屬性的時候,編譯器分不清這個屬性是來自於a還是來自於b,所以當這種情況,要通過類名::屬性名來指定。

class

a;class

b;class

c:public

a,public

b;int main()

快速入門C 08 繼承

類的繼承 繼承機制使得我們可以建立乙個類的堆疊層次結構,每個子類都將繼承他的基類裡定義的方法和屬性。基類必須在子類之前初始化!訪問控制 就是c 提供了一種用來保護類裡的方法和屬性的手段。保護即是對誰可以呼叫某個方法和訪問某個屬性加上乙個限制。public 可以被所有 訪問 protected 只能由...

C 快速入門 多繼承(20)

c 快速入門 多繼承 20 只要你遇到的問題無法只用乙個 是乙個 關係來描述的時候,就是多繼承出場的時候。例子 有一部分學生還教課掙錢 助教 這樣就存在了即是老師又是學生的複雜關係,也就是同時存在著兩個 是乙個 關係。我們需要寫乙個teachingstudent類讓它同時繼承teacher類和stu...

C 快速入門 虛繼承(21)

c 快速入門 虛繼承 21 通過虛繼承某個基類,就是在告訴編譯器,從當前這個類再派生出來的子類只能擁有那個基類的乙個例項。虛繼承的語法 class teacher virtual public person 讓student類和teacher類都虛繼承自person類,編譯器將確保從student和...