中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++中默認無參構造函數的工作機制是什么

發布時間:2023-02-28 10:20:02 來源:億速云 閱讀:258 作者:iii 欄目:開發技術

這篇文章主要介紹“C++中默認無參構造函數的工作機制是什么”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“C++中默認無參構造函數的工作機制是什么”文章能幫助大家解決問題。

在不實現構造函數的情況下,編譯器會自動生成一個默認無參構造函數。但是看起來編譯器自動生成的無參默認構造函數似乎沒有什么用,比如創建p對象時調用了編譯器生成的無參默認構造函數,但是p對象的成員變量依舊是隨機值。

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

C++中默認無參構造函數的工作機制是什么

默認無參構造函數真的沒有用嗎?

我們可以通過下面的代碼來探究默認無參構造函數的作用。

#include<iostream>
#include<string>
using namespace std;
class Person
{
	int age;
public:
	Person() { cout << "自定義類型成員的默認無參構造函數被調用" << endl; }
	//Person(int _age = 0) :age(_age) { cout << "自定義類型成員的全缺省默認構造函數被調用" << 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;
}

C++中默認無參構造函數的工作機制是什么

上面代碼利用默認無參構造函數創建對象s,根據第一句輸出,我們可以得知默認無參構造函數會先對自定義類型的數據成員會調用自定義數據類型的默認構造函數來處理自定義類型數據成員。根據第二句輸出,我們可以知道默認無參構造函數對基本類型數據成員沒有作處理,只是在初始化列表中用隨機值對其進行了初始化,第三句輸出,是默認無參構造函數調用了自定義類型的默認構造函數對自定義數據成員處理的結果,由于自定義類型的默認構造函數也是默認無參構造函數,所以它不會對基本數據類型成員age作處理,只是在初始化列表中用隨機值對其進行初始化。

我們把第八行代碼屏蔽,放出第九行全缺省默認構造函數試試看,輸出如下:

C++中默認無參構造函數的工作機制是什么

上面代碼利用默認無參構造函數創建對象s,根據第一句輸出,我們可以得知默認無參構造函數會先對自定義類型的數據成員會調用自定義數據類型的默認構造函數來處理自定義類型數據成員,與之前不同的是,之前自定義數據類型的默認構造函數是默認無參構造函數,這里自定義類型的默認構造函數,是自己定義的全缺省的默認構造函數。根據第二句輸出,我們可以知道默認無參構造函數對基本類型數據成員沒有作處理,只是在初始化列表中用隨機值對其進行了初始化,第三句輸出,是默認無參構造函數調用了自定義類型的全缺省默認構造函數對自定義數據成員處理的結果。

由此我們可以得出結論:

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

默認無參默認構造函數對基本類型成員變量不做處理(在初始化列表中用隨機值對其進行初始化),C++11 中針對基本類型成員不初始化的缺陷,又打了補丁,即:基本類型成員變量在類中聲明時可以給默認值。

默認無參構造函數對于自定義類型成員變量才會處理,它會去調用自定義類型的默認構造函數去初始化創建自定義類型的成員變量(對象)。

何時使用編譯器自動生成的無參默認構造函數就夠了,何時需要自己實現構造函數呢?

如果一個類中的成員全是自定義類型,或者基本類型成員在聲明時已經給了缺省值,即無需對基本類型成員變量做處理,且自定義成員都提供了默認構造函數,此時使用編譯器自動生成的無參默認構造函數就可以了。

如果有基本類型的成員變量且需要顯示傳參初始化,即我們需要自己對基本類型成員變量進行處理,或者自定義類型成員沒有默認構造函數,那么就要自己實現構造函數。

關于“C++中默認無參構造函數的工作機制是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

杭锦后旗| 沐川县| 恩施市| 仲巴县| 汝南县| 闽清县| 白银市| 安吉县| 兰州市| 邳州市| 宜宾市| 白河县| 米泉市| 佳木斯市| 武汉市| 井研县| 肃北| 沽源县| 惠安县| 滁州市| 柘荣县| 股票| 湘西| 清苑县| 花莲市| 中卫市| 灵山县| 松江区| 和硕县| 周口市| 怀柔区| 沁阳市| 镶黄旗| 韶关市| 土默特左旗| 合川市| 乌拉特前旗| 清镇市| 广平县| 桂阳县| 海南省|