[編程語言][C++]類成員變量初始化之坑-創(chuàng)新互聯(lián)

類成員變量初始化之坑
  • 問題描述
  • 總結(jié)

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

按照經(jīng)驗,設(shè)計一個類時需要對成員變量進行初始化。C++提供了兩種初始化成員變量的途徑,讓程序員有了一些的選擇空間。同時,這也給程序員留下了坑。

初始化類成員變量的途徑:

  1. 在定義成員變量時初始化
  2. 在初始化成員列表中初始化

據(jù)此,設(shè)計以下代碼:

#includeusing namespace std::literals;

std::string generate_name_1()
{std::cout<< "Calling generate_name_1() ..."<< std::endl;

	return "Alex"s;
}

std::string generate_name_2()
{std::cout<< "Calling generate_name_2() ..."<< std::endl;

	return "Brant"s;
}

std::string generate_name_3()
{std::cout<< "Calling generate_name_3() ..."<< std::endl;

	return "Chris"s;
}

class person_1
{public:
	person_1() = default;

	std::string name() const {return m_name; }

private:
	std::string m_name{generate_name_1() };
};

class person_2
{public:
	person_2() :m_name{generate_name_2() } {}

	std::string name() const {return m_name; }

private:
	std::string m_name;
};

class person_3
{public:
	person_3() :m_name{generate_name_2() } {}

	std::string name() const {return m_name; }

private:
	std::string m_name{generate_name_1() };
};

class person_4
{public:
	person_4() :m_name{generate_name_2() }
	{m_name = generate_name_3();
	}

	std::string name() const {return m_name; }

private:
	std::string m_name{generate_name_1() };
};

int main()
{std::cout<< "===== class person_1 ====="<< std::endl;
	person_1 person1;
	std::cout<< person1.name()<< std::endl;
	std::cout<< std::endl;

	std::cout<< "===== class person_2 ====="<< std::endl;
	person_2 person2;
	std::cout<< person2.name()<< std::endl;
	std::cout<< std::endl;

	std::cout<< "===== class person_3 ====="<< std::endl;
	person_3 person3;
	std::cout<< person3.name()<< std::endl;
	std::cout<< std::endl;

	std::cout<< "===== class person_4 ====="<< std::endl;
	person_4 person4;
	std::cout<< person4.name()<< std::endl;
	std::cout<< std::endl;

	return EXIT_SUCCESS;
}

上述代碼的運行結(jié)果如下:

===== class person_1 =====
Calling generate_name_1() ...
Alex

===== class person_2 =====
Calling generate_name_2() ...
Brant

===== class person_3 =====
Calling generate_name_2() ...
Brant

===== class person_4 =====
Calling generate_name_2() ...
Calling generate_name_3() ...
Chris

我們看到:

  1. 如果定義成員變量時初始化,則使用此處的初始化值
  2. 如果在初始化成員列表中初始化,則使用此處的初始化值
  3. 如果定義成員變量時初始化,并且同時在初始化成員列表中初始化,則定義成員變量時的初始化被忽略
  4. 如果在構(gòu)造函數(shù)的函數(shù)體內(nèi)給成員變量賦值,則該已被初始化的成員變量的值在此處被賦值。

總的來說就是:賦值會覆蓋初始化值,初始化成員列表中的初始化會覆蓋定義成員變量時的初始化。

總結(jié)
  1. 最好對所有的類成員變量進行初始化,以防止其值處于不確定的狀態(tài)。
  2. 基礎(chǔ)且通用的初始化值應(yīng)該在定義類成員變量時進行初始化,而較為特殊的初始化值應(yīng)該在構(gòu)造函數(shù)的初始化成員列表中進行初始化。
  3. 最好不要在構(gòu)造函數(shù)中,試圖通過賦值的方式對成員變量進行初始化。因為這樣會多出賦值的過程,降低程序的性能。

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

本文題目:[編程語言][C++]類成員變量初始化之坑-創(chuàng)新互聯(lián)
分享地址:http://muchs.cn/article48/ceehep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司、服務(wù)器托管、軟件開發(fā)動態(tài)網(wǎng)站、外貿(mào)建站網(wǎng)站改版

廣告

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

外貿(mào)網(wǎng)站制作