最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++類與對象的詳細(xì)說明

 更新時間:2022年02月17日 16:13:46   作者:樹獺想吃飯  
這篇文章主要為大家詳細(xì)介紹了C++的類與對象,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

類的引入

在引入類之前,先來回憶一下C語言中的結(jié)構(gòu)體。結(jié)構(gòu)體是一種自定義類型,可以在其中定義變量,如我們所熟悉的日期結(jié)構(gòu)體:

struct Date
{
	int year;
	int month;
	int day;
};

而在C++中,結(jié)構(gòu)體被升級成了類,結(jié)構(gòu)體中不僅可以定義成員變量,也可以定義成員函數(shù)(成員方法):

struct Date
{
	//成員變量
	int year;
	int month;
	int day;
	//成員方法
	void print()
	{
		cout << year << "-" << month << "-" << "day" << endl;
	}
};

在C++中,更喜歡使用class來替代struct,當(dāng)然它們也有所差別,在之后會說明。

類的定義

類的定義可以分為兩種,即聲明和定義全部放在類體中與聲明與定義分離。

1、聲明和定義全部放在類體中

該方式即為上一舉例代碼的定義方式。但要注意,如果采用這種方法定義成員函數(shù),編譯器可能會將該函數(shù)作為內(nèi)聯(lián)函數(shù)處理。

2、聲明放在頭文件,定義放在源文件中

頭文件中成員函數(shù)只需要聲明:

struct Date
{
	//成員變量
	int year;
	int month;
	int day;
	//成員方法
	void print();
};

在源文件中對函數(shù)進(jìn)行定義:

void Date::print()
{
	cout << year << "-" << month << "-" << "day" << endl;
}

需要注意,print為類域中的函數(shù),如果不加Date::用以指定類域,會導(dǎo)致定義出錯。因此,使用該方式定義成員函數(shù)時,一定要注意指定類域。

類的訪問限定符號及封裝

訪問限定符

訪問限定符分為三種:

(1)public修飾的成員在類外可以直接被訪問:

class Date
{
public:
	int year;
	int month;
	int day;
	void print()
	{
		cout << year << "-" << month << "-" << "day" << endl;
	}
};
int main()
{
	Date date;
	date.day = 0;
}

如上代碼,在main函數(shù)中可以直接對對象中的成員變量day進(jìn)行訪問。

(2)protected和private修飾的成員變量在類外不能被直接訪問

class Date
{
private:
	int year;
	int month;
	int day;
	void print()
	{
		cout << year << "-" << month << "-" << "day" << endl;
	}
};
int main()
{
	Date date;
	date.day = 0;
}

此時如果在main函數(shù)中對直接對象中的成員變量day進(jìn)行訪問,會導(dǎo)致錯誤

 (3)訪問權(quán)限作用域是從該訪問限定符的位置開始直到下一個訪問限定符出現(xiàn)時為止

class Date
{
private:
	int year;
	int month;
	int day;
public:
	void print()
	{
		cout << year << "-" << month << "-" << "day" << endl;
	}
};

如上代碼,成員變量均為私有的,而成員函數(shù)print為公有的。

(4)class的默認(rèn)訪問權(quán)限(即不寫訪問限定符時)為private,struct為public

封裝

封裝實(shí)際上是一種更好的嚴(yán)格管理

將數(shù)據(jù)和方法封裝到類里,可以訪問的定義為共有,不想給他人訪問的定義為私有或保護(hù)。如此一來就做到了隱藏對象的屬性和細(xì)節(jié),僅僅對外公開接口來和對象進(jìn)行交互,更加安全高效。

類的實(shí)例化

所謂類的實(shí)例化,簡而言之就是用類類型創(chuàng)建對象的過程。

打個比方,類就好似建筑的圖紙,而對象就是根據(jù)圖紙造出的建筑。對象是真實(shí)存在摸得著的,只有實(shí)例化出的對象才能夠?qū)嶋H存儲數(shù)據(jù)。

類對象模型

學(xué)過C語言我們知道如何計算結(jié)構(gòu)體的大小,那么在C++中,類的大小如何確定呢?

我們所不清楚的,就是類中成員函數(shù)的大小如何計算。實(shí)事上對于同一類的不同對象,處理問題的方法是相同的,如果每個對象都要保存一遍成員方法,未免有些過于浪費(fèi)空間了。

因此在C++中,成員函數(shù)存放在公共代碼段。計算類的大小只需要按照C語言中結(jié)構(gòu)體大小的計算規(guī)則即可,不需要考慮成員函數(shù)。

注意:空類的大小為1byte,不存儲有效數(shù)據(jù),但需要占位用以表示對象存在。

this指針

class Date
{
private:
	int _year;
	int _month;
	int _day;
public:
	void init(int year, int month, int day)
	{
		_year = year;
		_month = month;
		_day = day;
	}
};
int main()
{
	Date date1, date2;
	date1.init(2022, 2, 14);
	date2.init(2022, 2, 15);
}

對于上述代碼,有一個問題,date1與date2這兩個對象分別都調(diào)用了init進(jìn)行初始化,那么init函數(shù)是如何區(qū)分該為哪個對象進(jìn)行初始化的呢?

C++通過引入this指針解決了這個問題。

this指針的特性

1、this指針的類型:類類型* const,存放對象的地址

2、只能在成員函數(shù)內(nèi)部使用

3、this指針本質(zhì)上是成員函數(shù)的形參,傳參時存放在棧幀中,對象中不存儲this指針

4、this指針為隱藏的形參,不需要用戶傳遞

在上述代碼實(shí)際被處理成了這樣:

void init(int year, int month, int day)
{
	this->_year = year;
	this->_month = month;
	this->_day = day;
}

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!    

相關(guān)文章

  • Visual Studio 2019安裝使用C語言程序(VS2019 C語言)

    Visual Studio 2019安裝使用C語言程序(VS2019 C語言)

    這篇文章主要介紹了Visual Studio 2019安裝使用C語言程序,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 詳解c語言中的 strcpy和strncpy字符串函數(shù)使用

    詳解c語言中的 strcpy和strncpy字符串函數(shù)使用

    strcpy 和strcnpy函數(shù)是字符串復(fù)制函數(shù)。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數(shù)使用,感興趣的朋友跟隨小編要求看看吧
    2018-10-10
  • C++實(shí)現(xiàn)從數(shù)組中同時取出最大最小元素算法示例

    C++實(shí)現(xiàn)從數(shù)組中同時取出最大最小元素算法示例

    這篇文章主要介紹了C++實(shí)現(xiàn)從數(shù)組中同時取出最大最小元素算法,結(jié)合具體實(shí)例形式分析了C++通過數(shù)組的遍歷、排序獲取最大與最小元素的相關(guān)操作技巧,需要的朋友可以參考下
    2017-09-09
  • 詳解C語言中的符號常量、變量與算術(shù)表達(dá)式

    詳解C語言中的符號常量、變量與算術(shù)表達(dá)式

    這篇文章主要介紹了C語言中的符號常量、變量與算術(shù)表達(dá)式,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-11-11
  • C++ 輕量級對象JSON序列化實(shí)現(xiàn)詳情

    C++ 輕量級對象JSON序列化實(shí)現(xiàn)詳情

    本文以jsoncpp庫為基礎(chǔ),設(shè)計這樣一個可以支持一個函數(shù) 可以一行代碼 unmarshal /marshal 對象,需要的朋友小伙伴可以參考以下
    2021-09-09
  • C++ 深入淺出探索模板

    C++ 深入淺出探索模板

    人們需要編寫多個形式和功能都相似的函數(shù),因此有了函數(shù)模板來減少重復(fù)勞動;人們也需要編寫多個形式和功能都相似的類,于是 C++ 引人了類模板的概念,編譯器從類模板可以自動生成多個類,避免了程序員的重復(fù)勞動
    2022-04-04
  • vs2019 MFC實(shí)現(xiàn)office界面的畫圖小項(xiàng)目

    vs2019 MFC實(shí)現(xiàn)office界面的畫圖小項(xiàng)目

    本文主要介紹了vs2019 MFC實(shí)現(xiàn)office界面的畫圖小項(xiàng)目,對大家入門有一定的幫助,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • C語言超詳細(xì)i講解雙向鏈表

    C語言超詳細(xì)i講解雙向鏈表

    在實(shí)際生活中,我們用到的最多的兩種鏈表結(jié)構(gòu)就是單鏈表和雙向帶頭鏈表,上一篇已經(jīng)介紹了單鏈表的實(shí)現(xiàn)以及一些應(yīng)用,接下來我為大家詳細(xì)介紹一下雙向鏈表,以及一些鏈表oj題
    2022-05-05
  • C語言靜態(tài)鏈表和動態(tài)鏈表

    C語言靜態(tài)鏈表和動態(tài)鏈表

    靜態(tài)鏈表和動態(tài)鏈表是線性表鏈?zhǔn)酱鎯Y(jié)構(gòu)的兩種不同的表示方式。靜態(tài)鏈表的初始長度一般是固定的,在做插入和刪除操作時不需要移動元素,僅需修改指針。動態(tài)鏈表是相對于靜態(tài)鏈表而言的,一般地,在描述線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)時如果沒有特別說明即默認(rèn)描述的是動態(tài)鏈表。
    2016-05-05
  • Qt使用QChart實(shí)現(xiàn)動態(tài)顯示溫度變化曲線

    Qt使用QChart實(shí)現(xiàn)動態(tài)顯示溫度變化曲線

    Qt的QChart是一個用于繪制圖表和可視化數(shù)據(jù)的類,提供了一個靈活的、可擴(kuò)展的、跨平臺的圖表繪制解決方案,所以本文就將使用QChart實(shí)現(xiàn)動態(tài)顯示3個設(shè)備的溫度變化曲線,感興趣的可以了解一下
    2023-06-06

最新評論

肃南| 瑞安市| 大同县| 舒城县| 招远市| 四子王旗| 全椒县| 安仁县| 东城区| 河东区| 奎屯市| 新乐市| 三河市| 大悟县| 大洼县| 瑞昌市| 田东县| 湟源县| 黄浦区| 方城县| 紫金县| 晋宁县| 拉孜县| 东平县| 沙雅县| 南川市| 湘潭市| 衢州市| 伊川县| 华容县| 都江堰市| 自贡市| 泸溪县| 奉节县| 东海县| 昭通市| 郸城县| 外汇| 博湖县| 高台县| 工布江达县|