2009年5月20日 星期三

C++的class與struct,各種繼承方式

這些都算小常識了,閒來無事把他弄成文章以後方便看

C++有兩個方式可以自訂type:class與struct
這兩個用法完全一樣,幾乎可以說是一樣的東西
只是差別在class預設使用private屬性與繼承,struct則是public

class A{
int a;
};
class B:A{
};

就相當於

class A{
private int a;
};
class B:private A{
};

而struct

struct A{
int a;
};
struct B:A{
};

則相當於

struct A{
public int a;
};
struct B:public A{
};

再來簡單比較一下各種繼承的不同,C++繼承可分為private、publie、protected
以及比較特殊的虛擬(Virtrul)繼承

public繼承



class Base{};
class Derive:public Base{};


用個表格表達一切





父類別子類別
publicpublic
protectedprotected
private無法存取

這張表是說當子類別public繼承父類別的時候,如果父類別的member為public,其子類別繼承的該member也會是public


protected繼承



class Base{};
class Derive:protecte Base{};







父類別子類別
publicprotected
protectedprotected
private無法存取

像上述例子裡面,使用protected繼承,父類別的public會被降次為protected

private繼承



class Base{};
class Derive:private Base{};







父類別子類別
publicprivate
protectedprivate
private無法存取

以private繼承的時候,父類別的public跟protected member子類別依然可以存取
只是會被降次成private,這樣連帶影響的是孫類別不能使用

-----------------------
簡單來說,就是繼承時,根據使用的修飾,只要父類別修飾權限比繼承權限高,就會自動降次到跟繼承權限相同,而這對子類別其實沒影響,會影響的是孫類別對這些member的存取

沒有留言: