欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

類(lèi)和對(duì)象中-創(chuàng)新互聯(lián)

類(lèi)和對(duì)象中 1. 類(lèi)的6個(gè)默認(rèn)成員函數(shù)

如果一個(gè)類(lèi)中什么成員都沒(méi)有,簡(jiǎn)稱(chēng)為空類(lèi)

創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括思禮網(wǎng)站建設(shè)、思禮網(wǎng)站制作、思禮網(wǎng)頁(yè)制作以及思禮網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,思禮網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到思禮省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

空類(lèi)并不是說(shuō)里面什么都沒(méi)有:任何類(lèi)在什么都不寫(xiě)時(shí),編譯器會(huì)自動(dòng)生成以下6個(gè)默認(rèn)成員函數(shù)。

默認(rèn)成員函數(shù):用戶沒(méi)有顯式實(shí)現(xiàn),編譯器會(huì)生成的成員函數(shù)稱(chēng)為默認(rèn)成員函數(shù)

class A{};

在這里插入圖片描述

2. 構(gòu)造函數(shù) 2.1概念

構(gòu)造函數(shù)是一個(gè)特殊的成員函數(shù),名字與類(lèi)名相同,創(chuàng)建類(lèi)類(lèi)型對(duì)象時(shí)由編譯器自動(dòng)調(diào)用,以保證每個(gè)數(shù)據(jù)成員都有 一個(gè)合適的初始值,并且在對(duì)象整個(gè)生命周期內(nèi)只調(diào)用一次

2.2 特性

構(gòu)造函數(shù)是特殊的成員函數(shù),需要注意的是,構(gòu)造函數(shù)雖然名字叫構(gòu)造,但是構(gòu)造函數(shù)的主要任務(wù)并不是開(kāi)空間創(chuàng)建對(duì)象,而是初始化對(duì)象

特點(diǎn):

  1. 函數(shù)名與類(lèi)名相同
  2. 無(wú)返回值
  3. 對(duì)象實(shí)例化時(shí),編譯器自動(dòng)調(diào)用對(duì)應(yīng)的構(gòu)造函數(shù)
  4. 構(gòu)造函數(shù)可以重載
class Date 
{
public:
	Date()
	{}//無(wú)參的默認(rèn)構(gòu)造

	Date(int year, int mouth, int day)
	{
		_year = year;
		_mouth = mouth;
		_day = day;
	}//帶參數(shù)的構(gòu)造函數(shù)

private:
	int _year;
	int _mouth;
	int _day;
};

void TestDate()
{
	Date d1; // 調(diào)用無(wú)參構(gòu)造函數(shù)
	Date d2(2015, 1, 1); // 調(diào)用帶參的構(gòu)造函數(shù)


	// 注意:如果通過(guò)無(wú)參構(gòu)造函數(shù)創(chuàng)建對(duì)象時(shí),對(duì)象后面不用跟括號(hào),否則就成了函數(shù)聲明
	// 以下代碼的函數(shù):聲明了d3函數(shù),該函數(shù)無(wú)參,返回一個(gè)日期類(lèi)型的對(duì)象
	// warning C4930: “Date d3(void)”: 未調(diào)用原型函數(shù)(是否是有意用變量定義的?)
	Date d3();//這是聲明不是創(chuàng)建對(duì)象
}
  1. 如果類(lèi)中沒(méi)有顯式定義構(gòu)造函數(shù),則C++編譯器會(huì)自動(dòng)生成一個(gè)無(wú)參的默認(rèn)構(gòu)造函數(shù),一旦用戶顯式定義編譯器將不再生成
class Date
{
public:

	//Date(int year, int mouth, int day)
	//{
	//	_year = year;
	//	_mouth = mouth;
	//	_day = day;
	//}
    void Print()
    {
    	cout<< _year<< "-"<< _month<< "-"<< _day<< endl;
    }

private:
	int _year;
	int _mouth;
	int _day;
};

int main()
{
	Date d1;
    // 將Date類(lèi)中構(gòu)造函數(shù)屏蔽后,代碼可以通過(guò)編譯,因?yàn)榫幾g器生成了一個(gè)無(wú)參的默認(rèn)構(gòu)造函數(shù)
    // 將Date類(lèi)中構(gòu)造函數(shù)放開(kāi),代碼編譯失敗,因?yàn)橐坏╋@式定義任何構(gòu)造函數(shù),編譯器將不再生成無(wú)參構(gòu)造函數(shù),放開(kāi)后報(bào)錯(cuò):error C2512: “Date”: 沒(méi)有合適的默認(rèn)構(gòu)造函數(shù)可用
	return 0;
}
  1. C++把類(lèi)型分成內(nèi)置類(lèi)型(基本類(lèi)型)和自定義類(lèi)型。內(nèi)置類(lèi)型就是語(yǔ)言提供的數(shù)據(jù)類(lèi)型,如:
    int/char…,自定義類(lèi)型就是我們使用class/struct/union等自己定義的類(lèi)型 ,編譯器**生成默認(rèn)的構(gòu)造函數(shù)會(huì)對(duì)自定類(lèi)型成員調(diào)用的它的默認(rèn)構(gòu)造函數(shù),自定義類(lèi)型不處理**

    注意:C++11 中針對(duì)內(nèi)置類(lèi)型成員不初始化的缺陷,又打了補(bǔ)丁,即:內(nèi)置類(lèi)型成員變量在類(lèi)中聲明時(shí)可以給默認(rèn)值(也就是缺省值)

  2. 無(wú)參的構(gòu)造函數(shù)和全缺省的構(gòu)造函數(shù)都稱(chēng)為默認(rèn)構(gòu)造函數(shù),并且默認(rèn)構(gòu)造函數(shù)只能有一個(gè)。注意:無(wú)參構(gòu)造函數(shù)、全缺省構(gòu)造函數(shù)、我們沒(méi)寫(xiě)編譯器默認(rèn)生成的構(gòu)造函數(shù),都可以認(rèn)為是默認(rèn)構(gòu)造函數(shù)。

3. 析構(gòu)函數(shù) 3.1概念

析構(gòu)函數(shù):與構(gòu)造函數(shù)功能恰巧相反,析構(gòu)函數(shù)不是完成對(duì)對(duì)象本身的銷(xiāo)毀,局部對(duì)象銷(xiāo)毀工作是由編譯器完成的。而對(duì)象在銷(xiāo)毀時(shí)會(huì)自動(dòng)調(diào)用析構(gòu)函數(shù),完成對(duì)象中資源的清理工作

3.2 特性

構(gòu)造函數(shù)是特殊的成員函數(shù),其特征如下:

  1. 析構(gòu)函數(shù)是在類(lèi)名前面加上字符~

  2. 無(wú)參數(shù)無(wú)返回值類(lèi)型

  3. 一個(gè)類(lèi)只能有一個(gè)析構(gòu)函數(shù),若未顯式定義,系統(tǒng)會(huì)自動(dòng)生成默認(rèn)的析構(gòu)函數(shù),注意:析構(gòu)函數(shù)不能重載

  4. 對(duì)象生命周期結(jié)束時(shí),C++編譯器自動(dòng)調(diào)用析構(gòu)函數(shù)

  5. 關(guān)于編譯器自動(dòng)生成的析構(gòu)函數(shù),是否會(huì)完成一些事情呢?下面的程序我們會(huì)看到,編譯器生成的默認(rèn)析構(gòu)函數(shù),對(duì)自定類(lèi)型成員調(diào)用它的析構(gòu)函數(shù)。

  6. 如果==類(lèi)中沒(méi)有申請(qǐng)資源時(shí),析構(gòu)函數(shù)可以不寫(xiě)(它是回收資源的)==,直接使用編譯器生成的默認(rèn)析構(gòu)函數(shù),比如Date類(lèi);有資源申請(qǐng)時(shí),一定要寫(xiě),否則會(huì)造成資源泄漏,比如Stack類(lèi)

4.拷貝構(gòu)造函數(shù) 4.1 概念

拷貝構(gòu)造函數(shù):只有單個(gè)形參,該形參是對(duì)本類(lèi)類(lèi)型對(duì)象的引用(一般常用const修飾),在用已存在的類(lèi)類(lèi)型對(duì)象創(chuàng)建新對(duì)象時(shí)由編譯器自動(dòng)調(diào)用。

4.2 特征
  1. 拷貝構(gòu)造函數(shù)是構(gòu)造函數(shù)的一個(gè)重載形式

  2. 拷貝構(gòu)造函數(shù)的**參數(shù)只有一個(gè)且必須是類(lèi)類(lèi)型對(duì)象的引用,使用傳值方式編譯器直接報(bào)錯(cuò),**因?yàn)闀?huì)引發(fā)無(wú)窮遞歸調(diào)用。(因?yàn)樾螀鬟f給函數(shù)是拷貝構(gòu)造,寫(xiě)拷貝構(gòu)造去調(diào)用拷貝構(gòu)造就會(huì)引起無(wú)窮遞歸

    class Date
    {
    public:
    	Date(int year = 1900, int month = 1, int day = 1)
    	{
    		_year = year;
    		_month = month;
    		_day = day;
    	}
    
    	// Date(const Date& d) // 正確寫(xiě)法
    	Date(const Date d) // 錯(cuò)誤寫(xiě)法:編譯報(bào)錯(cuò),會(huì)引發(fā)無(wú)窮遞歸
    	{
    		_year = d._year;
    		_month = d._month;
    		_day = d._day;
    	}
    private:
    	int _year;
    	int _month;
    	int _day;
    };
  3. .**若未顯示定義,編譯器會(huì)生成默認(rèn)的拷貝構(gòu)造。**默認(rèn)的拷貝構(gòu)造函數(shù)對(duì)象會(huì)按內(nèi)存存儲(chǔ)按字節(jié)序完成拷貝,這種拷貝叫做淺拷貝,或者值拷貝

    注意:在編譯器生成的默認(rèn)拷貝構(gòu)造函數(shù)中,內(nèi)置類(lèi)型是按照字節(jié)方式直接拷貝的,而**自定義類(lèi)型是調(diào)用其拷貝構(gòu)造函數(shù)完成拷貝的 **

  4. 編譯器生成的默認(rèn)拷貝構(gòu)造函數(shù)已經(jīng)可以完成字節(jié)序的值拷貝了, 還需要自己顯式實(shí)現(xiàn)嗎?當(dāng)然

    注意:類(lèi)中如果沒(méi)有涉及資源申請(qǐng)時(shí),拷貝構(gòu)造函數(shù)是否寫(xiě)都可以;一旦涉及到資源申請(qǐng)時(shí),則拷貝構(gòu)造函數(shù)是一定要寫(xiě)的,否則就是淺拷貝。 就會(huì)出現(xiàn)倆個(gè)類(lèi)指向同一塊資源,調(diào)用析構(gòu)函數(shù)的時(shí)候,析構(gòu)函數(shù)可以能就會(huì)析構(gòu)兩次,引發(fā)問(wèn)題

  5. 拷貝構(gòu)造調(diào)用場(chǎng)景:

    • 使用已存在對(duì)象創(chuàng)建新對(duì)象
    • 函數(shù)參數(shù)類(lèi)型為類(lèi)類(lèi)型對(duì)象
    • 函數(shù)返回值類(lèi)型為類(lèi)類(lèi)型對(duì)象
  6. 為了提高程序效率,一般對(duì)象傳參時(shí),盡量使用引用類(lèi)型,返回時(shí)根據(jù)實(shí)際場(chǎng)景,能用引用盡量使用引用。

5.賦值運(yùn)算符重載 5.1 運(yùn)算符重載

C++為了增強(qiáng)代碼的可讀性引入了運(yùn)算符重載,運(yùn)算符重載是具有特殊函數(shù)名的函數(shù),也具有其返回值類(lèi)型,函數(shù)名字以及參數(shù)列表,其返回值類(lèi)型與參數(shù)列表與普通的函數(shù)類(lèi)似。
函數(shù)名字為:關(guān)鍵字operator后面接需要重載的運(yùn)算符符號(hào)。
函數(shù)原型:**返回值類(lèi)型 operator操作符(參數(shù)列表) **

注意:

  • 不能通過(guò)連接其他符號(hào)來(lái)創(chuàng)建新的操作符:比如operator@
  • 重載操作符必須有一個(gè)類(lèi)類(lèi)型參數(shù)
  • 用于內(nèi)置類(lèi)型的運(yùn)算符,其含義不能改變,例如:內(nèi)置的整型+,不 能改變其含義
  • 作為類(lèi)成員函數(shù)重載時(shí),其形參看起來(lái)比操作數(shù)數(shù)目少1,因?yàn)槌蓡T函數(shù)的第一個(gè)參數(shù)為隱藏的this
  • .* :: sizeof ?: .注意以上5個(gè)運(yùn)算符不能重載。
5.2 賦值運(yùn)算符重載
  1. 賦值運(yùn)算符重載格式
    • 參數(shù)類(lèi)型:const T&,傳遞引用可以提高傳參效率
    • 返回值類(lèi)型:T&,返回引用可以提高返回的效率,有返回值目的是為了支持連續(xù)賦值
    • 檢測(cè)是否自己給自己賦值
    • 返回*this :要復(fù)合連續(xù)賦值的含義
  1. 賦值運(yùn)算符只能重載成類(lèi)的成員函數(shù)不能重載成全局函數(shù)

原因:賦值運(yùn)算符如果不顯式實(shí)現(xiàn),編譯器會(huì)生成一個(gè)默認(rèn)的。此時(shí)用戶再在類(lèi)外自己實(shí)現(xiàn)一個(gè)全局的賦值運(yùn)算符重載,就和編譯器在類(lèi)中生成的默認(rèn)賦值運(yùn)算符重載沖突了,故賦值運(yùn)算符重載只能是類(lèi)的成員函數(shù)。

在這里插入圖片描述

  1. 用戶沒(méi)有顯式實(shí)現(xiàn)時(shí),編譯器會(huì)生成一個(gè)默認(rèn)賦值運(yùn)算符重載,以值的方式逐字節(jié)拷貝。注意:內(nèi)置類(lèi)型成員變量是直接賦值的,而自定義類(lèi)型成員變量需要調(diào)用對(duì)應(yīng)類(lèi)的賦值運(yùn)算符重載完成賦值。 (和拷貝構(gòu)造一個(gè)意思,如果有資源的申請(qǐng)就必須要實(shí)現(xiàn)深拷貝,不然會(huì)出問(wèn)題)

    如果類(lèi)中未涉及到資源管理,賦值運(yùn)算符是否實(shí)現(xiàn)都可以;一旦涉及到資源管理則必須要實(shí)現(xiàn)

5.3 前置++和后置++重載
class Date
{
public:
	Date(int year = 1900, int month = 1, int day = 1)
	{
		_year = year;
		_month = month;
		_day = day;
	}
	// 前置++:返回+1之后的結(jié)果
	// 注意:this指向的對(duì)象函數(shù)結(jié)束后不會(huì)銷(xiāo)毀,故以引用方式返回提高效率
	Date& operator++()
	{
		_day += 1;
		return *this;
	}
	// 后置++:
	// 前置++和后置++都是一元運(yùn)算符,為了讓前置++與后置++形成能正確重載
	// C++規(guī)定:后置++重載時(shí)多增加一個(gè)int類(lèi)型的參數(shù),但調(diào)用函數(shù)時(shí)該參數(shù)不用傳遞,編譯器自動(dòng)傳遞
		// 注意:后置++是先使用后+1,因此需要返回+1之前的舊值,故需在實(shí)現(xiàn)時(shí)需要先將this保存一份,然后給this + 1
		// 而temp是臨時(shí)對(duì)象,因此只能以值的方式返回,不能返回引用
	Date operator++(int)
	{
		Date temp(*this);
		_day += 1;
		return temp;
	}
	void print()
	{
		cout<< _year<< " "<< _month<< " "<< _day<< endl;
	}
private:
	int _year;
	int _month;
	int _day;
};
int main()
{
	Date d;
	Date d1(2022, 1, 13);
	d = d1++; // d: 2022,1,13 d1:2022,1,14
	d.print();
	d1.print();

	d = ++d1; // d: 2022,1,15 d1:2022,1,15
	d.print();
	d1.print();
	return 0;
}
7.const成員

將const修飾的“成員函數(shù)”稱(chēng)之為const成員函數(shù),const修飾類(lèi)成員函數(shù),實(shí)際修飾該成員函數(shù)隱含的this指針,表明在該成員函數(shù)中不能對(duì)類(lèi)的任何成員進(jìn)行修改

在這里插入圖片描述

8.取地址及const取地址操作符重載
class Date
{
	public :
	Date* operator&()
	{
		return this ;
	}
	const Date* operator&()const
	{
		return this ;
	}
private :
	int _year ; // 年
	int _month ; // 月
	int _day ; // 日
};

這兩個(gè)運(yùn)算符一般不需要重載,使用編譯器生成的默認(rèn)取地址的重載即可,只有特殊情況,才需要重載,比如想讓別人獲取到指定的內(nèi)容

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

分享題目:類(lèi)和對(duì)象中-創(chuàng)新互聯(lián)
分享網(wǎng)址:http://chinadenli.net/article30/ceecso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)電子商務(wù)響應(yīng)式網(wǎng)站網(wǎng)站維護(hù)網(wǎng)站改版網(wǎng)頁(yè)設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)