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