前面講的面向過(guò)程和面向?qū)ο螅蠹叶加辛嘶镜牧私猓灿胹truct定義了類(lèi),那么接下來(lái)咱們就用C++提供的另一個(gè)關(guān)鍵字class來(lái)定義類(lèi),同樣的我們還是使用前面的學(xué)生結(jié)構(gòu),首先直接把struct改成class看有沒(méi)有什么問(wèn)題。
class Stu //定義學(xué)生結(jié)構(gòu)
{
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;//前面講過(guò)在C++中可以省略,struct關(guān)鍵字
cPlus.init();// error “Stu::init”: 無(wú)法訪問(wèn) private 成員
cPlus.showStuInfo();//error “Stu::showStuInfo”: 無(wú)法訪問(wèn) private 成員
return 0;
}
編譯代碼會(huì)發(fā)現(xiàn),有兩處錯(cuò)誤,大概的意思都是說(shuō)無(wú)法訪問(wèn)private成員,那么什么意思呢?這就是struct和class的不同之處了:
- struct 默認(rèn)是公有(public)的:即在類(lèi)的外面可以訪問(wèn)類(lèi)里面的成員(如果沒(méi)有指定權(quán)限訪問(wèn)限定符)
- class 默認(rèn)是私有(private)的:即在類(lèi)的外面不可以訪問(wèn)類(lèi)的成員(如果沒(méi)有指定權(quán)限訪問(wèn)限定符)
相同點(diǎn):
- 都可以使用權(quán)限訪問(wèn)限定符來(lái)修改類(lèi)成員,在外部的訪問(wèn)權(quán)限(除此之外struct和class沒(méi)有任何區(qū)別)
對(duì)于上面的代碼,我們可以這樣修改一下在類(lèi)中的最上面加上public,這樣就可以在外面隨意訪問(wèn)成員啦
如果說(shuō)只想讓外部能夠訪問(wèn)成員函數(shù),而不想讓外部訪問(wèn)到成員變量,那么可以這樣
至于protected訪問(wèn)限定符,是作用與派生類(lèi)中的,這個(gè)后面會(huì)講到(對(duì)于類(lèi)的外部來(lái)說(shuō),和private一樣)
-
C++
+關(guān)注
關(guān)注
22文章
2116瀏覽量
74699 -
Class
+關(guān)注
關(guān)注
0文章
53瀏覽量
20004 -
Struct
+關(guān)注
關(guān)注
0文章
31瀏覽量
11021
發(fā)布評(píng)論請(qǐng)先 登錄
關(guān)于LabVIEW 類(lèi)及其對(duì)象使用的疑問(wèn)
JAVA和C++區(qū)別
3分鐘看懂Python面向對(duì)象
VEE對(duì)象是否支持阿拉伯字符?
LabVIEW面向對(duì)象的ActorFramework(1)
類(lèi)對(duì)象分配內(nèi)存錯(cuò)誤怎么辦
類(lèi)與對(duì)象_實(shí)驗(yàn)2
Java教程之零點(diǎn)起飛學(xué)Java的類(lèi)與對(duì)象資料說(shuō)明

Java實(shí)驗(yàn):類(lèi)和對(duì)象的擴(kuò)展

Labview面向對(duì)象編程快速入門(mén)教程

什么是不可變對(duì)象 不可變對(duì)象存儲(chǔ)可以抵御哪些威脅
Python中的類(lèi)和對(duì)象詳解
Objects:為對(duì)象類(lèi)提供對(duì)象技術(shù)

評(píng)論