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

C++類與對象的詳細說明2

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

類的默認成員函數(shù)

每個類中,如果不主動實現(xiàn)默寫特定函數(shù),類中也會自動去生成這些函數(shù),它們就是默認成員函數(shù)。默認成員函數(shù)分為六種,它們是特殊的成員函數(shù),如果我們不實現(xiàn),編譯器會自己實現(xiàn)。

下面將對這些函數(shù)一 一進行介紹。

構造函數(shù)

概念

構造函數(shù)的作用即為初始化,相當于平時我們自己寫的Init函數(shù),但在對象實例化時會自動調(diào)用,以保證實例化對象一定初始化。

特性

(1)函數(shù)名與類名相同

如日期類Date,其構造函數(shù)名也為Date

(2)無返回值

以日期類為例,其構造函數(shù)的聲明和定義可以寫成如下樣子:

class Date{public:Date(int year = 0, int month = 1, int day = 1);private:int _year;int _month;int _day;};class Date
{
public:
	Date(int year = 0, int month = 1, int day = 1);
private:
	int _year;
	int _month;
	int _day;
};
Date::Date(int year, int month, int day)
{
	_year = year;
	_month = month;
	_day = day;
}

(3)對象實例化時編譯器自動調(diào)用對應的構造函數(shù)

為了驗證這一點,我們創(chuàng)建一個對象,但不對其進行其它操作:

int main()
{  
	Date date1;
	return 0;
}

 通過調(diào)試可以發(fā)現(xiàn)對象date1已經(jīng)被自動初始化了。

(4)構造函數(shù)可以重載

(5)如果類中沒有顯式定義構造函數(shù),則C++編譯器會自動生成一個無參的默認構造函數(shù),一旦用戶顯式定義,編譯器將不再自動生成。

(6)無參的構造函數(shù)和全缺省的構造函數(shù)都稱為默認構造函數(shù),并且默認構造函數(shù)只能有一個。

針對第五點,我們不免會發(fā)出疑問,編譯器自動生成的默認構造函數(shù)究竟干了什么呢?

首先,需要先了解C++把類型分為兩類:內(nèi)置類型(基本類型)和自定義類型。

內(nèi)置類型就是C語言自帶的類型,如int、char、double、指針、內(nèi)置類型的數(shù)組;而自定義類型就是strucrt和class定義的類型。

編譯器默認生成的構造函數(shù),對于成員變量中的內(nèi)置類型不做初始化,對于自定義類型成員變量則會調(diào)用它的默認構造函數(shù)初始化,如果沒有默認構造函數(shù)則會報錯。

析構函數(shù)

概念

析構函數(shù)的功能是完成對象中資源的清理。虛構函數(shù)會在對象的生命周期到了之后調(diào)用。

特性

(1)析構函數(shù)名是在類名前加上字符~。

(2)無參數(shù)無返回值。

日期類析構函數(shù)的聲明可以寫成如下形式:

~Date();

(3)一個類有且只有一個析構函數(shù)。若喂顯式定義,系統(tǒng)會自動生成默認的析構函數(shù)。

(4)對象生命周期結束時,C++編譯系統(tǒng)自動調(diào)用析構函數(shù)。 

對于編譯器自動生成的默認析構函數(shù),與構造函數(shù)類似,對于內(nèi)置類型成員變量不做處理;對于自定義類型成員變量會去調(diào)用它的構造函數(shù)。

拷貝構造函數(shù)

概念

拷貝構造函數(shù)用于使用同類型對象去初始化實例對象。

特征

(1)拷貝構造函數(shù)是構造函數(shù)的一個重載形式。

(2)拷貝構造函數(shù)的參數(shù)只有一個且必須使用引用傳參,使用傳值的方式會引發(fā)無窮遞歸調(diào)用。

日期類拷貝構造函數(shù)的聲明需要寫成如下形式:

Date(Date& date);

為什么必須采用引用傳參呢?引發(fā)無窮遞歸又是怎么一回事呢?

不妨來思考一下,傳參實際上也是對內(nèi)容進行臨時拷貝,將實參傳給形參本身就需要調(diào)用拷貝構造。由此一來,會導致不斷調(diào)用拷貝構造,造成無窮遞歸調(diào)用。

(3)若未顯式定義,系統(tǒng)會生成默認的拷貝構造函數(shù)了。

默認拷貝構造函數(shù)對于內(nèi)置類型成員,會完成按字節(jié)序的拷貝(淺拷貝),如果需要深拷貝則需要自己寫拷貝構造函數(shù);對于自定義類型成員,則會調(diào)用它的拷貝構造函數(shù)。

所謂按字節(jié)序拷貝指將內(nèi)存中的內(nèi)容照搬照抄,復制過來。在一些情況下就會出錯,如存放申請內(nèi)存地址的指針,如果按字節(jié)序拷貝,會導致兩個對象中的成員變量指向同一塊空間,在析構時會導致同一塊空間釋放內(nèi)存多次,引發(fā)錯誤。

賦值運算符重載

運算符重載

在談及賦值運算符重載前,必須先來講一講運算符重載。

我們知道,對于int類型,是可以進行加減乘除等運算的。但對于自定義類型,能否實現(xiàn)加減乘除運算呢?這就需要運用到運算符重載了。

運算符重載是具有特殊函數(shù)名的函數(shù)。函數(shù)名字為:operator操作符(參數(shù)列表)

注意:一些運算符不支持重載,即:.*、::、sizeof、?:、.

以Date類==運算符重載為例,需要將函數(shù)作為成員函數(shù),以便于訪問成員變量:

class Date
{
public:
	Date(int year = 0, int month = 1, int day = 1);
	bool operator==(Date& date)const;
private:
	int _year;
	int _month;
	int _day;
};
bool Date::operator==(Date& date)const
{
	return _year == date._year
		&& _month == date._month
		&& _day == date._day;
}

賦值運算符重載

賦值運算符重載顧名思義,是對賦值運算符進行的重載,用于兩個已經(jīng)存在的對象進行賦值拷貝。

賦值運算符重載有四個要點:

(1)參數(shù)類型

(2)返回值

(3)檢測是否自己給自己賦值

(4)返回*this,用于連續(xù)賦值

一個類如果沒有顯式定義賦值運算符重載,編譯器會自己生成一個,對于內(nèi)置成員,完成按字節(jié)序拷貝;對于自定義成員變量,會調(diào)用它的賦值運算符重載。

取地址及const取地址操作符重載

這兩個運算符一般不需要重新定義,使用編譯器生成的重載即可,只有特殊情況才需要重載,如不希望自己特定的內(nèi)容被別人訪問時。

總結

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

相關文章

  • 詳解C語言之操作符

    詳解C語言之操作符

    這篇文章主要以圖文結合的方式為大家詳細介紹了C語言的操作符知識,感興趣的小伙伴們可以參考一下,希望能給你帶來幫助
    2021-11-11
  • C++函數(shù)重載詳解及實例代碼

    C++函數(shù)重載詳解及實例代碼

    這篇文章主要介紹了C++函數(shù)重載詳解及實例代碼的相關資料,需要的朋友可以參考下
    2016-09-09
  • c語言double類型默認輸出小數(shù)幾位

    c語言double類型默認輸出小數(shù)幾位

    在本篇文章里小編給大家分享的是關于c語言double類型默認輸出小數(shù)幾位的相關知識點,需要的朋友們可以學習下。
    2020-04-04
  • C++11/14 線程調(diào)用類對象和線程傳參的方法

    C++11/14 線程調(diào)用類對象和線程傳參的方法

    這篇文章主要介紹了C++11/14 線程調(diào)用類對象和線程傳參的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • VC實現(xiàn)圖片拖拽及動畫的實例

    VC實現(xiàn)圖片拖拽及動畫的實例

    這篇文章介紹了VC實現(xiàn)圖片拖拽及動畫的實例,有需要的朋友可以參考一下
    2013-08-08
  • 詳解Matlab實現(xiàn)動態(tài)表白圖的繪制

    詳解Matlab實現(xiàn)動態(tài)表白圖的繪制

    這篇文章主要利用Matlab實現(xiàn)繪制獨特的表白動圖,文中的示例代碼講解詳細,對我們學習Matlab有一定的幫助,感興趣的小伙伴可以了解一下
    2022-05-05
  • C++繼承類成員訪問權限修飾符詳解

    C++繼承類成員訪問權限修飾符詳解

    這篇文章主要為大家介紹了C++繼承類成員訪問權限修飾符,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • C語言單鏈表版學生信息管理系統(tǒng)

    C語言單鏈表版學生信息管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言單鏈表版學生信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C++多繼承(多重繼承)的實現(xiàn)

    C++多繼承(多重繼承)的實現(xiàn)

    多繼承容易讓代碼邏輯復雜、思路混亂,本文主要介紹了C++多繼承(多重繼承)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • C語言的字符串函數(shù),內(nèi)存函數(shù)筆記詳解

    C語言的字符串函數(shù),內(nèi)存函數(shù)筆記詳解

    這篇文章主要給大家介紹了關于C語言字符串/內(nèi)存的相關函數(shù),文中通過示例代碼總結的非常詳細,對大家學習或者使用C語言具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2021-09-09

最新評論

上林县| 长泰县| 新营市| 鸡泽县| 衢州市| 锡林郭勒盟| 黔南| 萨迦县| 新干县| 安阳县| 永定县| 新和县| 喜德县| 长岛县| 中江县| 瑞安市| 江西省| 万荣县| 合山市| 阜南县| 中西区| 尼玛县| 张家界市| 绩溪县| 元谋县| 繁昌县| 房产| 上犹县| 绿春县| 西城区| 怀远县| 邻水| 闵行区| 简阳市| 博湖县| 莆田市| 安陆市| 芒康县| 家居| 湘阴县| 东方市|