??博主主頁:???倔強(qiáng)的大蝸牛???
??專欄分類:C++
??感謝大家點(diǎn)贊??收藏?評(píng)論??
目錄
一、類的作用域?
二、類的實(shí)例化
三、類對(duì)象模型?
四、this指針
1、this指針的引出
?2 this指針的特性
一、類的作用域?
class Person
{
public:
void PrintPersonInfo();
private:
char _name[20];
char _gender[3];
int ?_age;
};
// 這里需要指定PrintPersonInfo是屬于Person這個(gè)類域
void Person::PrintPersonInfo()
{
cout << _name << " "<< _gender << " " << _age << endl;
}
二、類的實(shí)例化
?用類類型創(chuàng)建對(duì)象的過程,稱為類的實(shí)例化
2、一個(gè)類可以實(shí)例化出多個(gè)對(duì)象,實(shí)例化出的對(duì)象 占用實(shí)際的物理空間,存儲(chǔ)類成員變量;
?
int main()
{
Person._age = 100; ? // 編譯失?。篹rror C2059: 語法錯(cuò)誤:“.”
return 0;
}
Person類是沒有空間的,只有Person類實(shí)例化出的對(duì)象才有具體的年齡。
3、類實(shí)例化出對(duì)象就像現(xiàn)實(shí)中使用建筑設(shè)計(jì)圖建造出房子,類就像是設(shè)計(jì)圖,只設(shè)計(jì)出需要什么東西,但是并沒有實(shí)體的建筑存在,同樣類也只是一個(gè)設(shè)計(jì),實(shí)例化出的對(duì)象才能實(shí)際存儲(chǔ)數(shù)據(jù),占用物理空間;
三、類對(duì)象模型?
類對(duì)象模型是 C++ 面向?qū)ο缶幊讨械囊粋€(gè)核心概念,它定義了如何創(chuàng)建和使用對(duì)象的基本結(jié)構(gòu)。在 C++ 類對(duì)象模型中,類可以看作是一個(gè)模板,用于定義對(duì)象的屬性和方法,而實(shí)例則是根據(jù)這個(gè)模板創(chuàng)建出來的具體對(duì)象。
類和實(shí)例都是對(duì)象,分為內(nèi)置類對(duì)象(如 int、float、char、string 等)、自定義類對(duì)象(通過 class 關(guān)鍵字定義的類)和實(shí)例對(duì)象(由類對(duì)象創(chuàng)建的實(shí)例)。?
在 C++ 中,類對(duì)象模型更關(guān)注于對(duì)象的內(nèi)存布局和內(nèi)存管理。對(duì)于含有虛函數(shù)或其父類含有虛函數(shù)的類,編譯器會(huì)為其添加一個(gè)虛函數(shù)表(vptr),用于支持多態(tài)特性。在繼承關(guān)系中,子類對(duì)象的內(nèi)存布局會(huì)包含父類對(duì)象的拷貝(包括父類虛函數(shù)表指針和成員變量),然后是子類自己的成員變量數(shù)據(jù)。?
四、this指針
1、this指針的引出
class Date
{
public:
void Init(int year, int month, int day)
{
_year = year;
_month = month;
_day = day;
}
void Print()
{
cout <<_year<< "-" <<_month << "-"<< _day <<endl;
}
private:
int _year; ? ? // 年
int _month; ? ?// 月
int _day; ? ? ?// 日
};
int main()
{
Date d1, d2;
d1.Init(2022,1,11);
d2.Init(2022, 1, 12);
d1.Print();
d2.Print();
return 0;
}
問題:
Date類中有 Init 與 Print 兩個(gè)成員函數(shù),函數(shù)體中沒有關(guān)于不同對(duì)象的區(qū)分,那當(dāng)d1調(diào)用 Init 函數(shù)時(shí),該函數(shù)是如何知道應(yīng)該設(shè)置d1對(duì)象,而不是設(shè)置d2對(duì)象呢?解答:C++中通過引入this指針解決該問題,即:C++編譯器給每個(gè)“非靜態(tài)的成員函數(shù)“增加了一個(gè)隱藏的指針參數(shù),讓該指針指向當(dāng)前對(duì)象(函數(shù)運(yùn)行時(shí)調(diào)用該函數(shù)的對(duì)象),在函數(shù)體中所有“成員變量”的操作,都是通過該指針去訪問。只不過所有的操作對(duì)用戶是透明的,即用戶不需要來傳遞,編譯器自動(dòng)完成。
?2 this指針的特性
- this指針的類型:類類型* const,即成員函數(shù)中,不能給this指針賦值。
- 只能在“成員函數(shù)”的內(nèi)部使用
- ?this指針本質(zhì)上是“成員函數(shù)”的形參,當(dāng)對(duì)象調(diào)用成員函數(shù)時(shí),將對(duì)象地址作為實(shí)參傳遞給 this形參。所以對(duì)象中不存儲(chǔ)this指針。
- this指針是“成員函數(shù)”第一個(gè)隱含的指針形參,一般情況由編譯器通過ecx寄存器自動(dòng)傳遞,不需要用戶傳遞
?
??結(jié)語:?文章來源:http://www.zghlxwxcb.cn/news/detail-852041.html
本次精彩內(nèi)容已圓滿結(jié)束!希望各位讀者在閱讀過程中能夠收獲滿滿。在此,特別感謝各位讀者的支持與三連贊。如果文章中存在任何問題或不足之處,歡迎在評(píng)論區(qū)留言,蝸牛必定會(huì)認(rèn)真對(duì)待并加以改進(jìn),以便為大家呈現(xiàn)更優(yōu)質(zhì)的文章。你們的支持與鼓勵(lì),將是博主不斷前進(jìn)的最大動(dòng)力。再次感謝大家的陪伴與支持!文章來源地址http://www.zghlxwxcb.cn/news/detail-852041.html
到了這里,關(guān)于【C++成長(zhǎng)記】C++入門 | 類和對(duì)象(上) |類的作用域、類的實(shí)例化、類的對(duì)象大小的計(jì)算、類成員函數(shù)的this指針的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!