前面講的面向過程和面向對象,大家都有了基本的了解,也用struct定義了類,那么接下來咱們就用C++提供的另一個關鍵字class來定義類,同樣的我們還是使用前面的學生結構,首先直接把struct改成class看有沒有什么問題。
class Stu //定義學生結構
{
int id;
int age;
char name[10];
void init(int sid = 0, int sage = 0, const char* sname = "NULL")
{
id = sid;
age = sage;
strcpy(name, sname);
}
void showStuInfo()
{
cout << id << " " << age << " " << name << endl;
}
};
int main()
{
Stu cPlus;//前面講過在C++中可以省略,struct關鍵字
cPlus.init();// error “Stu::init”: 無法訪問 private 成員
cPlus.showStuInfo();//error “Stu::showStuInfo”: 無法訪問 private 成員
return 0;
}
編譯代碼會發現,有兩處錯誤,大概的意思都是說無法訪問private成員,那么什么意思呢?這就是struct和class的不同之處了:
- struct 默認是公有(public)的:即在類的外面可以訪問類里面的成員(如果沒有指定權限訪問限定符)
- class 默認是私有(private)的:即在類的外面不可以訪問類的成員(如果沒有指定權限訪問限定符)
相同點:
- 都可以使用權限訪問限定符來修改類成員,在外部的訪問權限(除此之外struct和class沒有任何區別)
對于上面的代碼,我們可以這樣修改一下在類中的最上面加上public,這樣就可以在外面隨意訪問成員啦
如果說只想讓外部能夠訪問成員函數,而不想讓外部訪問到成員變量,那么可以這樣
至于protected訪問限定符,是作用與派生類中的,這個后面會講到(對于類的外部來說,和private一樣)
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
C++
+關注
關注
22文章
2115瀏覽量
74151 -
Class
+關注
關注
0文章
53瀏覽量
19810 -
Struct
+關注
關注
0文章
31瀏覽量
10938
發布評論請先 登錄
相關推薦
關于LabVIEW 類及其對象使用的疑問
各位大神,我一直有個關于LabVIEW中使用類的問題。。。。當我建好一個類之后,直接將其拖到一個VI的程序框圖中,相當于一個類的對象,在這個VI中我可以隨便操作這個
發表于 11-23 22:20
JAVA和C++區別
。 8 字符串 c和c十十不支持字符串變量,在c和c十十程序中使用Null終止符代表字符串的結束,在Java中字符串是用類對象(strinR和stringBuffer)來實現的,這些類對象是
發表于 10-10 14:50
3分鐘看懂Python面向對象
Python雖然是解釋型語言,但從設計之初就已經是一門面向對象的語言,對于Python來說一切皆為對象。正因為如此,在Python中創建一個類和對象是很容易的,當然如果習慣面向過程或者
發表于 06-08 14:20
VEE對象是否支持阿拉伯字符?
大家好,有人知道VEE對象是否支持阿拉伯字符?我假設他們是Microsoft Windows應用程序的一部分,但如果有人有阿拉伯語運行的VEE應用程序的屏幕截圖,我真的很感激!有人設法讓VEE對象
發表于 04-02 06:17
LabVIEW面向對象的ActorFramework(1)
領域。面向對象是一種對現實世界理解和抽象的方法,是計算機編程技術發展到一定階段后的產物。 面向對象是相對于面向過程來講的,面向對象方法,把相關的數據和方法組織為一個整體來看待,從更高的層次來進行系統
發表于 02-10 14:09
類對象分配內存錯誤怎么辦
請大神幫忙,萬分感謝!!!操作系統:ucosIII 芯片:STM32F103我的類建立比較多。類對象是指針CCarriage*gCar;分配內存語句:gCar = new CCarriage
發表于 05-25 09:51
SystemC TLM中的接口
SystemC TLM中的接口 在SystemC TLM中,接口是一個C++的抽象類。抽象類中的所有方法都是用“=0”標識表示的純虛函數。C++不允許創建抽象類的對象,因為抽象
評論