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{};
用個表格表達一切
父類別 | 子類別 |
public | public |
protected | protected |
private | 無法存取 |
這張表是說當子類別public繼承父類別的時候,如果父類別的member為public,其子類別繼承的該member也會是public
protected繼承
class Base{};
class Derive:protecte Base{};
父類別 | 子類別 |
public | protected |
protected | protected |
private | 無法存取 |
像上述例子裡面,使用protected繼承,父類別的public會被降次為protected
private繼承
class Base{};
class Derive:private Base{};
父類別 | 子類別 |
public | private |
protected | private |
private | 無法存取 |
以private繼承的時候,父類別的public跟protected member子類別依然可以存取
只是會被降次成private,這樣連帶影響的是孫類別不能使用
-----------------------
簡單來說,就是繼承時,根據使用的修飾,只要父類別修飾權限比繼承權限高,就會自動降次到跟繼承權限相同,而這對子類別其實沒影響,會影響的是孫類別對這些member的存取
沒有留言:
張貼留言