国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C++類的默認(rèn)成員函數(shù)

這篇具有很好參考價(jià)值的文章主要介紹了C++類的默認(rèn)成員函數(shù)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

默認(rèn)函數(shù)

什么是默認(rèn)函數(shù)?
默認(rèn)函數(shù)就是當(dāng)你使用這個(gè)類對(duì)象時(shí),這個(gè)類會(huì)自動(dòng)調(diào)用的函數(shù)C++中有六個(gè)默認(rèn)成員函數(shù),并且作用各不相同,下面我們來一一進(jìn)行介紹

構(gòu)造函數(shù)和析構(gòu)函數(shù)

什么是構(gòu)造函數(shù)?構(gòu)造函數(shù)是干什么的?
什么是析構(gòu)函數(shù)?析構(gòu)函數(shù)是干什么的?
我們以棧為例,每一次我們?cè)谑褂脳5臅r(shí)候我們都要先定義它,并且每次在使用完棧之后還要去銷毀它,為了釋放空間防止內(nèi)存泄漏。然而我們?cè)趯?shí)際操作時(shí)經(jīng)常會(huì)忘記去定義,特別是最后的銷毀。祖師爺為了防止你的遺忘,專門設(shè)計(jì)出了這兩個(gè)默認(rèn)函數(shù)來減小你的壓力

構(gòu)造函數(shù)

構(gòu)造函數(shù)就是在定義對(duì)象的同時(shí),就對(duì)成員變量進(jìn)行初始化。

#include <iostream>

using namespace std;

class Date
{
public:
	//過去
	/*void Init(int year, int month, int day)
	{
		_year = year;
		_month = month;
		_day = day;
	}*/
	//現(xiàn)在
	Date(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;
	//D1.Init(2002, 01, 01);
	Date D1(2002, 01, 01);
	D1.Print();
	return 0;
}

一般情況下,我們會(huì)定義一個(gè)Init函數(shù),再定義完一個(gè)對(duì)象后,再調(diào)用Init函數(shù)對(duì)成員變量進(jìn)行初始化,這樣顯得有些繁瑣,那么可不可以選擇在定義對(duì)象時(shí)就對(duì)成員變量進(jìn)行初始化呢?
答案是肯定的,我們可以通過構(gòu)造函數(shù)來對(duì)成員變量進(jìn)行初始化。
默認(rèn)構(gòu)造函數(shù),其實(shí)類中是有默認(rèn)構(gòu)造函數(shù)的,就是在你創(chuàng)建這個(gè)對(duì)象時(shí),它就會(huì)自動(dòng)調(diào)用這個(gè)函數(shù),對(duì)成員變量進(jìn)行初始化,只不過有時(shí)候它默認(rèn)生成的值并不是我們想要的,所以就需要我們自己去定義。
如果類中沒有顯式定義構(gòu)造函數(shù),則C++編譯器會(huì)自動(dòng)生成一個(gè)無參的默認(rèn)構(gòu)造(成員)函數(shù),一旦用戶顯式定義編譯器將不再生成。
無論何時(shí)只要類的對(duì)象被創(chuàng)建,就會(huì)執(zhí)行構(gòu)造函數(shù)。C++規(guī)定內(nèi)置類型不做處理,自定義類型會(huì)去調(diào)用而它的默認(rèn)構(gòu)造。但是有些也會(huì)對(duì)內(nèi)置類型做處理,但那只是編譯器的個(gè)性化行為,C++并沒有規(guī)定。
構(gòu)造函數(shù)怎么去定義呢?首先構(gòu)造函數(shù)的取名就與其他函數(shù)不同,它的名字與類名相同,且不需要返回值,這里的不需要返回值是指他不需要加返回類型,void也不用加。
什么時(shí)候自己寫構(gòu)造函數(shù)呢?
如果類成員函數(shù)中有自定義類型就要去自己寫構(gòu)造函數(shù),如果類成員全是自定義類型就可以選擇不寫。
構(gòu)造函數(shù)參數(shù)可以給缺省值,且可以重載。
還有一個(gè)問題當(dāng)我們?cè)诙x對(duì)象時(shí)調(diào)用無參的構(gòu)造函數(shù),為什么不寫成這樣?

Date D1();

因?yàn)檫@樣編譯器很可能會(huì)把它當(dāng)做返回類型為Date的函數(shù)聲明。但是如果我們傳的是值

Date D1(2002, 01, 01);

編譯器就會(huì)識(shí)別出來它是變量的初始化而不是函數(shù)聲明。
注意:區(qū)分一些概念,我們不寫編譯器自己生成的是默認(rèn)成員函數(shù),也屬于默認(rèn)構(gòu)造函數(shù),默認(rèn)構(gòu)造函數(shù)是一個(gè)大類包括我們自己顯示寫的和編譯器自己生成的。
我們不傳參自動(dòng)調(diào)用的構(gòu)造函數(shù)就是默認(rèn)構(gòu)造函數(shù),必須要傳參的不屬于默認(rèn)構(gòu)造函數(shù),屬于構(gòu)造函數(shù)。
默認(rèn)構(gòu)造函數(shù)有三種:一種是編譯器自己生成的,一種是參數(shù)全缺省的,另一種是無參的構(gòu)造函數(shù),且這三個(gè)默認(rèn)構(gòu)造函數(shù)只能有一個(gè)。如果是自己寫的構(gòu)造函數(shù),編譯器就不會(huì)自動(dòng)生成構(gòu)造函數(shù)。

Date()
	{
		_year = 1;
		_month = 1;
		_day = 1;
	}
	Date(int year = 2, int month = 2, int day = 2)
	{
		_year = year;
		_month = month;
		_day = day;
	}

上面兩個(gè)構(gòu)造函數(shù),符合語法規(guī)定構(gòu)成重載,但是C++規(guī)定只能有一個(gè)默認(rèn)構(gòu)造函數(shù),所以我們只能寫其中的一個(gè),且上面兩個(gè)在函數(shù)調(diào)用的時(shí)候存在歧義,當(dāng)你不寫形參的時(shí)候,編譯器不知道你是要調(diào)用哪一個(gè)。
構(gòu)造函數(shù)可以重載,那默認(rèn)構(gòu)造函數(shù)與半缺省的構(gòu)造函數(shù)可不可以同時(shí)寫呢?

Date(int year = 2, int month = 2, int day = 2)
	{
		_year = year;
		_month = month;
		_day = day;
	}

	Date(int year = 3, int month = 2)
	{
		_year = year;
		_month = month;
		//_day = day;
	}

這樣也是不行的,半缺省與默認(rèn)構(gòu)造函數(shù)放在一起時(shí)也會(huì)存在調(diào)用歧義。
例如:

void Print(int x = 2, int y = 2)
{
	cout << x << " " << y << endl;
}

void Print(int x = 3, int y = 3, int z = 5)
{
	cout << x << " " << y << " " << z << endl;
}

這種雖然語法上來說也是構(gòu)成重載的,但是在你傳一個(gè)參數(shù)或兩個(gè)參數(shù)時(shí)會(huì)有多個(gè)參數(shù)參數(shù)列表匹配,就會(huì)存在調(diào)用歧義。

void Print(int x, int y )
{
	x = 2;
	y = 3;
	cout << x << " " << y << endl;
}

void Print(int x, int y, int z )
{
	x = 5;
	y = 6;
	z = 8;
	cout << x << " " << y << " " << z << endl;
}

上面這種才是真正的符合重載,不會(huì)再?zèng)_調(diào)用歧義。
對(duì)類成員初始化方式不同時(shí)才考慮使用重載構(gòu)造函數(shù),比如對(duì)一個(gè)棧的操作你可能想初始化時(shí)只對(duì)成員變量賦值,也可能想直接插入很多數(shù)據(jù),比如將一個(gè)數(shù)組都插入,這時(shí)才真正符合重載,就是參數(shù)類型不同。在有缺省的情況下,你再定義一個(gè)缺省函數(shù)就很有可能會(huì)造成調(diào)用歧義,除非你傳的實(shí)參個(gè)數(shù)不符合其它的重載函數(shù)。
全局對(duì)象先于局部對(duì)象進(jìn)行構(gòu)造
局部對(duì)象按照出現(xiàn)的順序進(jìn)行構(gòu)造,無論是否為static

析構(gòu)函數(shù)

析構(gòu)函數(shù)的函數(shù)名也與類名相同,但是要在函數(shù)名前加上按位取反符號(hào)‘~’,析構(gòu)函數(shù)的作用是在函數(shù)調(diào)用結(jié)束之后釋放空間,注意不是釋放這個(gè)對(duì)象,對(duì)象是在棧上開辟的,出了作用域棧上的空間會(huì)自動(dòng)釋放,只有動(dòng)態(tài)開辟的空間才需要用到析構(gòu)函數(shù)去釋放,就是在堆上開辟的空間,其它的像臨時(shí)變量等都是在棧上開辟的空間它會(huì)自動(dòng)釋放,此外析構(gòu)函數(shù)沒有參數(shù),所以析構(gòu)函數(shù)不可以重載,一個(gè)類中只有一個(gè)析構(gòu)函數(shù),如果不顯示的去寫,編譯器也會(huì)默認(rèn)生成構(gòu)造函數(shù),且對(duì)內(nèi)置類型不做處理,自定義類型會(huì)去調(diào)用它的構(gòu)造函數(shù)。出了作用域系統(tǒng)會(huì)自動(dòng)調(diào)用析構(gòu)函數(shù)。

~Stack()
	{
		if (_array)//_array是動(dòng)態(tài)開辟的空間
		{
			free(_array);
			_array = NULL;
			_capacity = 0;
			_size = 0;
		}
	}

什么時(shí)候?qū)懳鰳?gòu)函數(shù)?
析構(gòu)函數(shù)釋放的空間是釋放堆上的空間,就是我們動(dòng)態(tài)開辟的空間。
1.一般情況下,有動(dòng)態(tài)開辟的空間,就需要我們顯示的去寫析構(gòu)函數(shù)去釋放空間。
2.沒有動(dòng)態(tài)申請(qǐng)資源,就不需要寫析構(gòu)。像對(duì)象這種臨時(shí)變量,不是動(dòng)態(tài)開辟的空間,是在棧上開辟的,出了作用域系統(tǒng)會(huì)自動(dòng)清除棧上的資源。例如日期類類里面就沒有動(dòng)態(tài)申請(qǐng)的資源。
3.如果需要釋放的資源都是自定義類型,就不需要寫析構(gòu)函數(shù),默認(rèn)生成的析構(gòu)函數(shù)足夠用了。例如:

class Myque
{
private:
	Stack _pushst;
	Stack _popst;
};

拷貝構(gòu)造函數(shù)

在我們傳參數(shù)的過程中,可能會(huì)選擇值傳參,值傳參實(shí)際上就是對(duì)形參進(jìn)行初始化,對(duì)于內(nèi)置類型變量賦給另一個(gè)變量的時(shí)候就是值拷貝也稱為淺拷貝不用調(diào)用拷貝構(gòu)造函數(shù),而對(duì)于自定義類型在值拷貝時(shí),會(huì)調(diào)用拷貝構(gòu)造函數(shù)。每一個(gè)類都有它的默認(rèn)拷貝構(gòu)造函數(shù),但是這個(gè)默認(rèn)構(gòu)造函數(shù)是淺拷貝,也就是說這個(gè)拷貝它是按字節(jié)賦給新的變量,并沒有開辟新的空間。如果這個(gè)自定義類型中包含指針,那么新變量和被拷貝指針變量就會(huì)指向同一個(gè)空間,如果是這樣的話就會(huì)出問題,當(dāng)這兩個(gè)對(duì)象空間釋放時(shí),就會(huì)導(dǎo)致同一塊空間被析構(gòu)兩次,同一空間是不能被析構(gòu)兩次的,此外如果其中一個(gè)對(duì)象值發(fā)生改變,也會(huì)導(dǎo)致另一個(gè)對(duì)象值發(fā)生改變。任何類型的指針都是內(nèi)置類型,包括自定義類型。如果我們自己定義拷貝構(gòu)造函數(shù),就會(huì)解決上述問題,我們選擇深拷貝,深拷貝就是新開辟一塊空間,并將原指針指向的空間地址的值賦給新的空間,這樣就完成了拷貝,指針指向的空間不同,但是值是相同的。
那么我們可不可以直接用自定義類型作為形參?
答案是否定的,首先我們?cè)趯?duì)自定義類型進(jìn)行拷貝時(shí),調(diào)用的就是拷貝構(gòu)造函數(shù),調(diào)用它的時(shí)候又要進(jìn)行傳參,而在傳參的過程中,就是相當(dāng)于對(duì)自定義類型的形參進(jìn)行初始化,而這種賦值,就又會(huì)調(diào)用拷貝構(gòu)造函數(shù),而調(diào)用拷貝構(gòu)造函數(shù)就要傳參,傳參就要調(diào)用拷貝構(gòu)造,最后會(huì)形成無限遞歸。
C語言當(dāng)中自定義類型傳參就直接是淺拷貝,而在C++當(dāng)中在傳參時(shí)要先調(diào)用拷貝構(gòu)造,如果想避免上面的問題,還要進(jìn)行深拷貝,也就是調(diào)用我們自定義的拷貝構(gòu)造。
那么怎么解決自定義類型對(duì)象的拷貝呢?
上述傳自定義類型時(shí)在拷貝時(shí)都會(huì)調(diào)用拷貝構(gòu)造函數(shù),那么可以選擇傳地址或者用引用去解決上述問題。因?yàn)樽远x類型時(shí)才要拷貝構(gòu)造,傳指針或引用不需要,因?yàn)槿魏晤愋偷闹羔樁际莾?nèi)置類型,不會(huì)調(diào)用拷貝構(gòu)造函數(shù),直接把地址賦給新變量就可以,而傳引用就是傳這個(gè)對(duì)象的別名,引用對(duì)應(yīng)的變量并沒有開辟新的空間,這里重要的是這個(gè)類變量的地址和它的引用的地址是相同的,所以起引用名時(shí)不存在什么拷貝
C++類的默認(rèn)成員函數(shù)
引用的地址是相同的

class Date
{
public:
	Date(int year = 2023, int month = 1, int day = 1)
	{
		_year = year;
		_month = month;
		_day = day;
	}
	
	Date(const Date& d) 
	{
		_year = d._year;
		_month = d._month;
		_day = d._day;
	}
private:
	int _year;
	int _month;
	int _day;
};

在編譯器生成的默認(rèn)拷貝構(gòu)造函數(shù)中,內(nèi)置類型是按照字節(jié)方式直接拷貝的,而自定義類型是調(diào)用其拷貝構(gòu)造函數(shù)完成拷貝的。
類中如果沒有涉及資源申請(qǐng)時(shí),拷貝構(gòu)造函數(shù)是否寫都可以;一旦涉及到資源申請(qǐng)時(shí),則拷貝構(gòu)造函數(shù)是一定要寫的,否則就是淺拷貝。
拷貝構(gòu)造函數(shù)的參數(shù)只有一個(gè)且必須是類類型對(duì)象的引用,使用傳值方式編譯器直接報(bào)錯(cuò),實(shí)際上是有兩個(gè)參數(shù)一個(gè)是顯示的被拷貝的對(duì)象的引用,另一個(gè)是隱式的this指針
拷貝構(gòu)造函數(shù):只有單個(gè)形參,該形參是對(duì)本類類型對(duì)象的引用(一般常用const修飾),在用已存在的類類型對(duì)象創(chuàng)建新對(duì)象時(shí)由編譯器自動(dòng)調(diào)用。

運(yùn)算符重載

運(yùn)算符重載的作用:比如日期類我們想讓兩個(gè)日期進(jìn)行相減,如果我們直接讓這兩個(gè)對(duì)象進(jìn)行相減就會(huì)報(bào)錯(cuò),因?yàn)樽远x類型不是內(nèi)置類型,編譯器不知道他們是怎么進(jìn)行運(yùn)算的,所以我們要自己定義出這些符號(hào)具體的操作。運(yùn)算符重載的關(guān)鍵字是字operator然后后面加上重載符號(hào)。

#include <iostream>

using namespace std;

class Date
{
public:
	Date(int year = 2005, int month = 4, int day = 6)
	{
		_year = year;
		_month = month;
		_day = day;
	}

public:
	int _year;
	int _month;
	int _day;
};

//重載操作符定義在類外
bool operator<(Date d1, Date d2)
{
	if (d1._year < d2._year)
	{
		return true;
	}
	else if (d1._year == d2._year && d1._month < d2._month)
	{
		return true;
	}
	else if (d1._year == d2._year 
	&& d1._month < d2._month 
	&& d1._day < d2._day)
	{
		return true;
	}
	return false;
}

int main()
{
	Date d1(2005, 02, 03);
	Date d2(2006, 6, 10);
	d1 < d2;
	cout << operator<(d1, d2) << endl;
	return 0;
}

因?yàn)橹剌d操作也是一個(gè)函數(shù)所以也可以直接通過調(diào)用這個(gè)函數(shù)來對(duì)這兩個(gè)對(duì)象進(jìn)行比較。
注意如果是定義在類外的那么類成員就不能是私密的應(yīng)是public,因?yàn)樵陬愅獠荒苤苯釉L問私密的類成員
上面的重載操作符是全局函數(shù)即定義在類外的,所以顯示的形參個(gè)數(shù)與比較對(duì)象的個(gè)數(shù)相同。如果重載操作符函數(shù)是定義在類內(nèi)的,那么顯示傳參的個(gè)數(shù)就要比實(shí)際比較的對(duì)象個(gè)數(shù)少一個(gè),因?yàn)槎x在類內(nèi)就會(huì)有一個(gè)隱式的參數(shù)this指針存在

#include <iostream>

using namespace std;

class Date
{
public:
	Date(int year = 2005, int month = 4, int day = 6)
	{
		_year = year;
		_month = month;
		_day = day;
	}

	bool operator<(Date d)//只有一個(gè)顯式的參數(shù)因?yàn)榇藭r(shí)還有一個(gè)隱式的this
	{
		if (_year < d._year)
		{
			return true;
		}
		else if (_year == d._year && _month < d._month)
		{
			return true;
		}
		else if (_year == d._year && _month < d._month && _day < d._day)
		{
			return true;
		}
		return false;
	}

public:
	int _year;
	int _month;
	int _day;
};

int main()
{
	Date d1(2005, 02, 03);
	Date d2(2006, 6, 10);
	//定義為全局的重載操作運(yùn)算符時(shí)的調(diào)用
	/*d1 < d2;
	cout << operator<(d1, d2) << endl;*/
	//定義在類內(nèi)時(shí)的調(diào)用
	d1 < d2;
	d1.operator<(d2);
	return 0;
}

重載運(yùn)算符的參數(shù)中必須有一個(gè)是自定義類型的參數(shù),不能全是內(nèi)置類型。
作為類成員函數(shù)重載時(shí),其形參看起來比操作數(shù)數(shù)目少1,因?yàn)槌蓡T函數(shù)的第一個(gè)參數(shù)為隱藏的this。
.* //千萬別忘了這個(gè)運(yùn)算符也不能重載
:: sizeof ? : . 注意以上5個(gè)運(yùn)算符不能重載。

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

運(yùn)算符重載中有一個(gè)特殊的,就是賦值運(yùn)算符重載,像大于,小于,加,減等,如果你不寫那么這個(gè)自定義類型就不能進(jìn)行這些運(yùn)算符操作,但是賦值運(yùn)算符=,如果你不寫,編譯器也會(huì)自動(dòng)生成默認(rèn)的賦值運(yùn)算符重載,只不過默認(rèn)生成的是按字節(jié)賦值的淺拷貝,如果自定義類型中成員變量有動(dòng)態(tài)開辟的空間,那么就需要我們自己手動(dòng)的寫上。特別注意,其它的運(yùn)算符重載既可以定義成全局的,也可以定義在類內(nèi),但是賦值運(yùn)算符只能定義在類內(nèi),因?yàn)槠渌倪\(yùn)算符編譯器不會(huì)自動(dòng)生成,而賦值運(yùn)算符編譯器會(huì)在類內(nèi)自動(dòng)生成默認(rèn)的賦值運(yùn)算符重載,如果你在類外定義就會(huì)造成調(diào)用不明確,出現(xiàn)歧義,在類內(nèi)定義了,編譯器就不會(huì)自動(dòng)生成。
注意:內(nèi)置類型成員變量是直接賦值的,而自定義類型成員變量需要調(diào)用對(duì)應(yīng)類的賦值運(yùn)算符重載完成賦值。另外賦值運(yùn)算符,我們要有返回值且選擇返回它的引用,當(dāng)然也可以返回值,只不過是淺拷貝,且傳值返回會(huì)調(diào)用拷貝構(gòu)造,而返回引用不會(huì)調(diào)用拷貝構(gòu)造,且會(huì)減少空間的消耗,這個(gè)是定義在類里面的,出了作用域 this 還在,只不過是在調(diào)用時(shí)的中介this不在了,this是這個(gè)對(duì)象,對(duì)象的聲明周期不是在這個(gè)類里的 。

對(duì)象的傳值才要調(diào)用拷貝構(gòu)造,內(nèi)置類型傳值不調(diào)用拷貝構(gòu)造,任何類型的指針都是內(nèi)置類型,包括自定義類型的指針,傳引用就是在傳別名也不會(huì)調(diào)用拷貝構(gòu)造。

賦值運(yùn)算符重載和構(gòu)造函數(shù)

賦值運(yùn)算符是作用于兩個(gè)已經(jīng)存在的對(duì)象,一個(gè)對(duì)象的值賦給另一個(gè)對(duì)象。而構(gòu)造函數(shù)是用一個(gè)已經(jīng)存在的對(duì)象去初始化另一個(gè)對(duì)象。文章來源地址http://www.zghlxwxcb.cn/news/detail-431875.html

到了這里,關(guān)于C++類的默認(rèn)成員函數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【C++】類和對(duì)象②(類的默認(rèn)成員函數(shù):構(gòu)造函數(shù) | 析構(gòu)函數(shù))

    【C++】類和對(duì)象②(類的默認(rèn)成員函數(shù):構(gòu)造函數(shù) | 析構(gòu)函數(shù))

    ?? 個(gè)人主頁: Forcible Bug Maker ?? 專欄: C++ 目錄 前言 類的6個(gè)默認(rèn)成員函數(shù) 構(gòu)造函數(shù) 概念 構(gòu)造函數(shù)的特性及用法 析構(gòu)函數(shù) 概念 析構(gòu)函數(shù)的特性及用法 結(jié)語 本篇主要內(nèi)容:類的6個(gè)默認(rèn)成員函數(shù)中的 構(gòu)造函數(shù) 和 析構(gòu)函數(shù) 進(jìn)入到類和對(duì)象內(nèi)容的第二節(jié),上篇博客中介紹了

    2024年04月16日
    瀏覽(37)
  • C++從入門到精通——類的6個(gè)默認(rèn)成員函數(shù)之拷貝構(gòu)造函數(shù)

    C++從入門到精通——類的6個(gè)默認(rèn)成員函數(shù)之拷貝構(gòu)造函數(shù)

    類的6個(gè)默認(rèn)成員函數(shù):如果一個(gè)類中什么成員都沒有,簡(jiǎn)稱為空類。 空類中真的什么都沒有嗎?并不是,任何類在什么都不寫時(shí),編譯器會(huì)自動(dòng)生成以下6個(gè)默認(rèn)成員函數(shù)。 默認(rèn)成員函數(shù):用戶沒有顯式實(shí)現(xiàn),編譯器會(huì)生成的成員函數(shù)稱為默認(rèn)成員函數(shù)。 在現(xiàn)實(shí)生活中,可

    2024年04月26日
    瀏覽(21)
  • 【C++初階】第三站:類和對(duì)象(中) -- 類的6個(gè)默認(rèn)成員函數(shù)

    【C++初階】第三站:類和對(duì)象(中) -- 類的6個(gè)默認(rèn)成員函數(shù)

    目錄 前言 類的6個(gè)默認(rèn)成員函數(shù) 構(gòu)造函數(shù) 概念 特性 析構(gòu)函數(shù)? 概念 特性 拷貝構(gòu)造函數(shù) 概念 特征 賦值運(yùn)算符重載 運(yùn)算符重載 賦值運(yùn)算符重載 const成員 const修飾類成員函數(shù) 取地址及const取地址操作符重載 本章總結(jié): ????????有時(shí)候我們寫好了一個(gè)棧,頭腦中第一件事

    2024年02月20日
    瀏覽(25)
  • 【C++】類和對(duì)象③(類的默認(rèn)成員函數(shù):拷貝構(gòu)造函數(shù) | 賦值運(yùn)算符重載)

    【C++】類和對(duì)象③(類的默認(rèn)成員函數(shù):拷貝構(gòu)造函數(shù) | 賦值運(yùn)算符重載)

    ?? 個(gè)人主頁: Forcible Bug Maker ?? 專欄: C++ 目錄 前言 拷貝構(gòu)造函數(shù) 概念 拷貝構(gòu)造函數(shù)的特性及用法 賦值運(yùn)算符重載 運(yùn)算符重載 賦值運(yùn)算符重載 結(jié)語 本篇主要內(nèi)容:類的6個(gè)默認(rèn)成員函數(shù)中的 拷貝構(gòu)造函數(shù) 和 賦值運(yùn)算符重載 在上篇文章中我們講到了類的默認(rèn)成員函數(shù)的

    2024年04月17日
    瀏覽(29)
  • 【C++】中類的6個(gè)默認(rèn)成員函數(shù) 取地址及const成員函數(shù) && 學(xué)習(xí)運(yùn)算符重載 && 【實(shí)現(xiàn)一個(gè)日期類】

    【C++】中類的6個(gè)默認(rèn)成員函數(shù) 取地址及const成員函數(shù) && 學(xué)習(xí)運(yùn)算符重載 && 【實(shí)現(xiàn)一個(gè)日期類】

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

    2024年02月21日
    瀏覽(33)
  • C++從入門到精通——類的6個(gè)默認(rèn)成員函數(shù)之賦值運(yùn)算符重載

    C++從入門到精通——類的6個(gè)默認(rèn)成員函數(shù)之賦值運(yùn)算符重載

    類的6個(gè)默認(rèn)成員函數(shù):如果一個(gè)類中什么成員都沒有,簡(jiǎn)稱為空類。 空類中真的什么都沒有嗎?并不是,任何類在什么都不寫時(shí),編譯器會(huì)自動(dòng)生成以下6個(gè)默認(rèn)成員函數(shù)。 默認(rèn)成員函數(shù):用戶沒有顯式實(shí)現(xiàn),編譯器會(huì)生成的成員函數(shù)稱為默認(rèn)成員函數(shù)。 C++為了增強(qiáng)代碼的

    2024年04月25日
    瀏覽(29)
  • 【C++精華鋪】5.C++類和對(duì)象(中)類的六個(gè)默認(rèn)成員函數(shù)

    【C++精華鋪】5.C++類和對(duì)象(中)類的六個(gè)默認(rèn)成員函數(shù)

    目錄 1. 六個(gè)默認(rèn)成員函數(shù) 2. 構(gòu)造函數(shù) 2.1 概念 2.2 默認(rèn)構(gòu)造 2.2.1 系統(tǒng)生成的默認(rèn)構(gòu)造 2.2.2 自定義默認(rèn)構(gòu)造函數(shù) ?2.3 構(gòu)造函數(shù)的重載 3. 析構(gòu)函數(shù) 3.1 概念 ?3.2 系統(tǒng)生成的析構(gòu)函數(shù) ?3.3 自定義析構(gòu)函數(shù) 4. 拷貝構(gòu)造 4.1 概念 ?4.2 默認(rèn)生成的拷貝構(gòu)造(淺拷貝) ?4.3 自定義拷貝構(gòu)

    2024年02月13日
    瀏覽(52)
  • 【C++練級(jí)之路】【Lv.3】類和對(duì)象(中)(沒掌握類的6個(gè)默認(rèn)成員函數(shù),那你根本就沒學(xué)過C++?。? decoding=

    【C++練級(jí)之路】【Lv.3】類和對(duì)象(中)(沒掌握類的6個(gè)默認(rèn)成員函數(shù),那你根本就沒學(xué)過C++!)

    歡迎各位小伙伴關(guān)注我的專欄,和我一起系統(tǒng)學(xué)習(xí)C++,共同探討和進(jìn)步哦! 學(xué)習(xí)專欄 : 《進(jìn)擊的C++》 在C++的學(xué)習(xí)中,類和對(duì)象章節(jié)的學(xué)習(xí)尤為重要,猶如堅(jiān)固的地基,基礎(chǔ)不牢,地動(dòng)山搖;而默認(rèn)成員函數(shù)的學(xué)習(xí),在類和對(duì)象的學(xué)習(xí)里最為重要。所以要 學(xué)好C++,學(xué)好默認(rèn)

    2024年02月04日
    瀏覽(26)
  • 【C++】類和對(duì)象④(類的默認(rèn)成員函數(shù):取地址及const取地址重載 | 再談構(gòu)造函數(shù):初始化列表,隱式類型轉(zhuǎn)換,缺省值)

    【C++】類和對(duì)象④(類的默認(rèn)成員函數(shù):取地址及const取地址重載 | 再談構(gòu)造函數(shù):初始化列表,隱式類型轉(zhuǎn)換,缺省值)

    ?? 個(gè)人主頁: Forcible Bug Maker ?? 專欄: C++ 目錄 前言 取地址及const取地址操作符重載 再談構(gòu)造函數(shù) 初始化列表 隱式類型轉(zhuǎn)換 explicit 成員變量缺省值 結(jié)語 本篇主要內(nèi)容:類的六個(gè)默認(rèn)成員函數(shù)中的 取地址 及 const取地址重載 , 構(gòu)造函數(shù) 初始化列表 , 隱式類型轉(zhuǎn)換

    2024年04月26日
    瀏覽(29)
  • 類的默認(rèn)成員函數(shù)——析構(gòu)函數(shù)

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

    2024年02月14日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包