class drink;//別忘了最後要加乙個分號
當我們需要描述一杯飲料的時候,我們可以如下使用drink類:
drink a;//新建乙個飲料物件printf(
"the volume of the drink is %lf\n
",a.volume);
在c++中,作用域除了public,private還有protected。那這三者的區別到底是什麼呢?
先來看個示例,就明白了:
#includeusingnamespace
std;
classa
void
fun()
public:
inta1;
protected:
inta2;
private:
inta3;
};int
main()
再來看不是人看的話:
1.類的乙個特徵就是封裝,public和private作用就是實現這一目的。所以:使用者**(類外)可以訪問public成員而不能訪問private成員;private成員只能由類成員(類內)和友元訪問。
2.類的另乙個特徵就是繼承,protected的作用就是實現這一目的。所以:
protected成員可以被派生類物件訪問,不能被使用者**(類外)訪問。
繼承,顧名思義,就是乙個東西把另乙個東西的傳統保留下來。
我想要描述乙個雪碧物件,雪碧(sprite)和飲料(drink)有很多相似之處,我不想重複寫**,於是讓sprite物件繼承drink物件的屬性。
class sprite:publicdrink
此處的冒號代表繼承。
現在的sprite物件除了擁有drink的全部屬性(volume,currentvolume,price,massofingredienta等),還有了獨有的屬性(hasbubble());
q:那麼冒號後的public代表什麼用法呢?
先看看定義:
繼承中的特點:先記住:不管是否繼承,上面的規則永遠適用!
有public, protected, private三種繼承方式,它們相應地改變了基類成員的訪問屬性。
1.public繼承:基類public成員,protected成員,private成員的訪問屬性在派生類中分別變成:public, protected, private
2.protected繼承:基類public成員,protected成員,private成員的訪問屬性在派生類中分別變成:protected, protected, private
3.private繼承:基類public成員,protected成員,private成員的訪問屬性在派生類中分別變成:private,private, private
但無論哪種繼承方式,上面兩點都沒有改變:
1.private成員只能被本類成員(類內)和友元訪問,不能被派生類訪問;
2.protected成員可以被派生類訪問。
接下來是三個例子:
#includeusingnamespace
std;
classa
void
fun()
public:
inta1;
protected:
inta2;
private:
inta3;
};class b : publica
void
fun()
};int
main()
#includeusingnamespace
std;
classa
void
fun()
public:
inta1;
protected:
inta2;
private:
inta3;
};class b : protecteda
void
fun()
};int
main()
#includeusingnamespace
std;
classa
void
fun()
public:
inta1;
protected:
inta2;
private:
inta3;
};class b : privatea
void
fun()
};int
main()
現在你明白了嗎?
引用:深入理解c++中public、protected及private用法:
C 繼承與Class 記憶體模型
c 類主要包括屬性和操作兩類,在物件模型中即乙個物件例項中占用記憶體的只是class的屬性部分,也就是資料成員部分,本文旨在剖析c 物件模型中在有繼承情形下類物件的記憶體布局,主要分4種情況討論 單一繼承沒有多型 單一繼承有多型 多重繼承 虛擬繼承。所謂單一繼承沒有多型,也就是class b繼承於 ...
C 類class 學習筆記
三看原則 1.看呼叫的成員變數是在類的內部還是類的外部 2.看兒子繼承方式 3.當前變數在兒子中的變數在父親中的訪問控制許可權 類的相容性原則 子類物件可以當做父類物件使用 子類物件可以直接賦值給父類物件 子類物件可以直接初始化父類物件 父類指標可以直接指向子類物件 父類引用可以直接引用子類物件 為...
C 中結構 struct 與類 class 的區別
像類一樣,結構 struct 是能夠包含資料成員和函式成員的資料結構,但是與類不同,結構是值型別,不需要堆分配。結構型別的變數直接儲存該結構的資料,而類型別的變數則儲存對動態分配的物件的引用。結構型別不支援使用者指定的繼承,並且所有結構型別都隱式地從型別 object 繼承。結構對於具有值語義的小型...