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

C++中默認(rèn)無(wú)參構(gòu)造函數(shù)的工作機(jī)制淺析

 更新時(shí)間:2023年02月28日 08:35:12   作者:北冥有魚丶丶  
構(gòu)造函數(shù)主要作用在于創(chuàng)建對(duì)象時(shí)為對(duì)象的成員屬性賦值,構(gòu)造函數(shù)由編譯器自動(dòng)調(diào)用,無(wú)須手動(dòng)調(diào)用;析構(gòu)函數(shù)主要作用在于對(duì)象銷毀前系統(tǒng)自動(dòng)調(diào)用,執(zhí)行一些清理工作

在不實(shí)現(xiàn)構(gòu)造函數(shù)的情況下,編譯器會(huì)自動(dòng)生成一個(gè)默認(rèn)無(wú)參構(gòu)造函數(shù)。但是看起來(lái)編譯器自動(dòng)生成的無(wú)參默認(rèn)構(gòu)造函數(shù)似乎沒有什么用,比如創(chuàng)建p對(duì)象時(shí)調(diào)用了編譯器生成的無(wú)參默認(rèn)構(gòu)造函數(shù),但是p對(duì)象的成員變量依舊是隨機(jī)值。

class Person
{
private:
	int age;
public:
	int getAge()
	{
		return age;
	}
};
int main()
{
	Person p;
	cout << p.getAge() << endl;
	return 0;
}

默認(rèn)無(wú)參構(gòu)造函數(shù)真的沒有用嗎?

我們可以通過下面的代碼來(lái)探究默認(rèn)無(wú)參構(gòu)造函數(shù)的作用。

#include<iostream>
#include<string>
using namespace std;
class Person
{
	int age;
public:
	Person() { cout << "自定義類型成員的默認(rèn)無(wú)參構(gòu)造函數(shù)被調(diào)用" << endl; }
	//Person(int _age = 0) :age(_age) { cout << "自定義類型成員的全缺省默認(rèn)構(gòu)造函數(shù)被調(diào)用" << endl; }
	int getAge()
	{
		return age;
	}
};
class Student
{
	Person p;
	int id;
public:
	Student(){}
	int getId()
	{
		return id;
	}
	int getAge()
	{
		return p.getAge();
	}
};
int main()
{
	Student s;
	cout << "id:" << s.getId() << endl;
	cout << "age:" << s.getAge() << endl;
	return 0;
}

上面代碼利用默認(rèn)無(wú)參構(gòu)造函數(shù)創(chuàng)建對(duì)象s,根據(jù)第一句輸出,我們可以得知默認(rèn)無(wú)參構(gòu)造函數(shù)會(huì)先對(duì)自定義類型的數(shù)據(jù)成員會(huì)調(diào)用自定義數(shù)據(jù)類型的默認(rèn)構(gòu)造函數(shù)來(lái)處理自定義類型數(shù)據(jù)成員。根據(jù)第二句輸出,我們可以知道默認(rèn)無(wú)參構(gòu)造函數(shù)對(duì)基本類型數(shù)據(jù)成員沒有作處理,只是在初始化列表中用隨機(jī)值對(duì)其進(jìn)行了初始化,第三句輸出,是默認(rèn)無(wú)參構(gòu)造函數(shù)調(diào)用了自定義類型的默認(rèn)構(gòu)造函數(shù)對(duì)自定義數(shù)據(jù)成員處理的結(jié)果,由于自定義類型的默認(rèn)構(gòu)造函數(shù)也是默認(rèn)無(wú)參構(gòu)造函數(shù),所以它不會(huì)對(duì)基本數(shù)據(jù)類型成員age作處理,只是在初始化列表中用隨機(jī)值對(duì)其進(jìn)行初始化。

我們把第八行代碼屏蔽,放出第九行全缺省默認(rèn)構(gòu)造函數(shù)試試看,輸出如下:

上面代碼利用默認(rèn)無(wú)參構(gòu)造函數(shù)創(chuàng)建對(duì)象s,根據(jù)第一句輸出,我們可以得知默認(rèn)無(wú)參構(gòu)造函數(shù)會(huì)先對(duì)自定義類型的數(shù)據(jù)成員會(huì)調(diào)用自定義數(shù)據(jù)類型的默認(rèn)構(gòu)造函數(shù)來(lái)處理自定義類型數(shù)據(jù)成員,與之前不同的是,之前自定義數(shù)據(jù)類型的默認(rèn)構(gòu)造函數(shù)是默認(rèn)無(wú)參構(gòu)造函數(shù),這里自定義類型的默認(rèn)構(gòu)造函數(shù),是自己定義的全缺省的默認(rèn)構(gòu)造函數(shù)。根據(jù)第二句輸出,我們可以知道默認(rèn)無(wú)參構(gòu)造函數(shù)對(duì)基本類型數(shù)據(jù)成員沒有作處理,只是在初始化列表中用隨機(jī)值對(duì)其進(jìn)行了初始化,第三句輸出,是默認(rèn)無(wú)參構(gòu)造函數(shù)調(diào)用了自定義類型的全缺省默認(rèn)構(gòu)造函數(shù)對(duì)自定義數(shù)據(jù)成員處理的結(jié)果。

由此我們可以得出結(jié)論:

C++把類型分成基本類型和自定義類型。

默認(rèn)無(wú)參默認(rèn)構(gòu)造函數(shù)對(duì)基本類型成員變量不做處理(在初始化列表中用隨機(jī)值對(duì)其進(jìn)行初始化),C++11 中針對(duì)基本類型成員不初始化的缺陷,又打了補(bǔ)丁,即:基本類型成員變量在類中聲明時(shí)可以給默認(rèn)值。

默認(rèn)無(wú)參構(gòu)造函數(shù)對(duì)于自定義類型成員變量才會(huì)處理,它會(huì)去調(diào)用自定義類型的默認(rèn)構(gòu)造函數(shù)去初始化創(chuàng)建自定義類型的成員變量(對(duì)象)。

何時(shí)使用編譯器自動(dòng)生成的無(wú)參默認(rèn)構(gòu)造函數(shù)就夠了,何時(shí)需要自己實(shí)現(xiàn)構(gòu)造函數(shù)呢?

如果一個(gè)類中的成員全是自定義類型,或者基本類型成員在聲明時(shí)已經(jīng)給了缺省值,即無(wú)需對(duì)基本類型成員變量做處理,且自定義成員都提供了默認(rèn)構(gòu)造函數(shù),此時(shí)使用編譯器自動(dòng)生成的無(wú)參默認(rèn)構(gòu)造函數(shù)就可以了。

如果有基本類型的成員變量且需要顯示傳參初始化,即我們需要自己對(duì)基本類型成員變量進(jìn)行處理,或者自定義類型成員沒有默認(rèn)構(gòu)造函數(shù),那么就要自己實(shí)現(xiàn)構(gòu)造函數(shù)。

到此這篇關(guān)于C++中默認(rèn)無(wú)參構(gòu)造函數(shù)的工作機(jī)制淺析的文章就介紹到這了,更多相關(guān)C++默認(rèn)無(wú)參構(gòu)造函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

德钦县| 黔南| 和田县| 随州市| 依安县| 阿瓦提县| 天水市| 望奎县| 阿图什市| 台东县| 横山县| 钟山县| 伊吾县| 东方市| 房山区| 明星| 太湖县| 东港市| 滦平县| 扎囊县| 湘阴县| 德令哈市| 黄骅市| 临湘市| 民丰县| 贵阳市| 双峰县| 东宁县| 淮安市| 商洛市| 金溪县| 龙山县| 彭阳县| 中山市| 息烽县| 中江县| 岢岚县| 肥乡县| 定西市| 洞头县| 余干县|