" />

欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++構(gòu)造函數(shù)的初始化列表詳解

 更新時(shí)間:2021年12月17日 16:33:15   作者:圣人不入愛河  
這篇文章主要為大家介紹了C++構(gòu)造函數(shù)的初始化列表,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

1.問題

class A {
private:
	int m_a;
public:
	A(int a) {
		cout << "A(int a)......." << endl;
		m_a = a;
	}
	void print() {
		cout <<"m_a=" << m_a << endl;
	}
};
class B {
private:
	int m_b;
	A m_a1;
	A m_a2;
public:
	B(A& a1,A& a2, int b) 
	{
		m_b = b;
		m_a1(a1);//此處調(diào)用A的拷貝函數(shù)會(huì)報(bào)錯(cuò)
		m_a2(a2);//此處調(diào)用A的拷貝函數(shù)會(huì)報(bào)錯(cuò)
	}
};

錯(cuò)誤:

在這里插入圖片描述

在這里插入圖片描述

2.解決方法(初始化列表)

將class B構(gòu)造函數(shù)改寫為:

public:
	B(A& a1,A& a2, int b) :m_a1(a1),m_a2(a2)//構(gòu)造函數(shù)的初始化列表
	{
		m_b = b;
	}
};

完整代碼如下:

#include <iostream>
using namespace std;
class A {
private:
	int m_a;
public:
	A(int a) {
		cout << "A(int a)......." << endl;
		m_a = a;
	}
	void print() {
		cout <<"m_a=" << m_a << endl;
	}
	A(const A& another) {
		m_a = another.m_a;
	}
	~A() {
		cout << "~A()......" << endl;
	}
};
class B {
private:
	int m_b;
	A m_a1;
	A m_a2;
public:
	B(A& a1,A& a2, int b) :m_a1(a1),m_a2(a2)//構(gòu)造函數(shù)的初始化列表,調(diào)用拷貝構(gòu)造
	{
		cout << "B(A& a1,A& a2, int b)......." << endl;
		m_b = b;
	}
	~B() {
		cout << "~B()......." << endl;
		cout << "m_b=" << m_b  << endl;
		cout << "A m_a1" << endl;
		m_a1.print();
		cout << "A m_a2" << endl;
		m_a2.print();
	}
};
int main(int argc, char** argv) {
	A a1(1), a2(2);
	B b1(a1, a1, 3);
}

運(yùn)行結(jié)果:

在這里插入圖片描述

3.順序問題

構(gòu)造對(duì)象成員的順序跟初始化列表的順序無(wú)關(guān),而是跟成員對(duì)象定義的順序有關(guān)。(面試會(huì)問)

例子:

class A {
private:
	int m_a;
public:
	A(int a) {
		cout << "A(int a)......." <<a<< endl;
		m_a = a;
	}
	void print() {
		cout <<"m_a=" << m_a << endl;
	}
	A(const A& another) {
		m_a = another.m_a;
	}
	~A() {
		cout << "~A()......"<< endl;
	}
};
class B {
private:
	int m_b;
	A m_a2;
	A m_a1;
public:
	B(int a1, int a2, int b) :m_a1(a1), m_a2(a2)//調(diào)用有參構(gòu)造函數(shù)
	{
		cout << "B(int a1, int a2, int b)......." << endl;
		m_b = b;
	}
	~B() {
		cout << "~B()......." << endl;
	}
};
int main(int argc, char** argv) {
	B b2(1, 2, 3);
}

結(jié)果:

在這里插入圖片描述

跟下面順序有關(guān):

private:
	A m_a2;
	A m_a1;

跟下面順序無(wú)關(guān):

B(int a1, int a2, int b) :m_a1(a1), m_a2(a2)//調(diào)用有參構(gòu)造函數(shù)

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 詳解C++中的左值,純右值和將亡值

    詳解C++中的左值,純右值和將亡值

    C++中本身是存在左值,右值的概念,但是在C11中又出現(xiàn)了左值,純右值,將亡值得概念;這里我們主要介紹這些值的概念,感興趣的可以了解一下
    2022-09-09
  • C++事件驅(qū)動(dòng)型銀行排隊(duì)模擬

    C++事件驅(qū)動(dòng)型銀行排隊(duì)模擬

    這篇文章主要為大家詳細(xì)介紹了C++事件驅(qū)動(dòng)型銀行排隊(duì)模擬,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • C語(yǔ)言 超詳細(xì)講解庫(kù)函數(shù)

    C語(yǔ)言 超詳細(xì)講解庫(kù)函數(shù)

    C語(yǔ)言庫(kù)函數(shù)是把自定義函數(shù)放到庫(kù)里,是別人把一些常用到的函數(shù)編完放到一個(gè)文件里,供程序員使用,下面讓我們一起來詳細(xì)了解它
    2022-03-03
  • 簡(jiǎn)述C++中虛擬函數(shù)的內(nèi)存分配機(jī)制

    簡(jiǎn)述C++中虛擬函數(shù)的內(nèi)存分配機(jī)制

    這篇文章主要介紹了簡(jiǎn)述C++中虛擬函數(shù)的內(nèi)存分配機(jī)制,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-08-08
  • C/C++代碼操作MySQL數(shù)據(jù)庫(kù)詳細(xì)步驟

    C/C++代碼操作MySQL數(shù)據(jù)庫(kù)詳細(xì)步驟

    這篇文章主要給大家介紹了關(guān)于C/C++代碼操作MySQL數(shù)據(jù)庫(kù)的相關(guān)資料,通過文中的這些示例,我們可以連接到MySQL數(shù)據(jù)庫(kù),并執(zhí)行常見的數(shù)據(jù)庫(kù)操作,如創(chuàng)建表、插入數(shù)據(jù)和查詢數(shù)據(jù),需要的朋友可以參考下
    2023-12-12
  • C/C++?-?從代碼到可執(zhí)行程序的過程詳解

    C/C++?-?從代碼到可執(zhí)行程序的過程詳解

    這篇文章主要介紹了C/C++?-?從代碼到可執(zhí)行程序的過程,主要有預(yù)編譯和編譯,匯編鏈接,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01
  • C++語(yǔ)言數(shù)據(jù)結(jié)構(gòu) 串的基本操作實(shí)例代碼

    C++語(yǔ)言數(shù)據(jù)結(jié)構(gòu) 串的基本操作實(shí)例代碼

    這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu) 串的基本操作實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 字符串的模式匹配詳解--BF算法與KMP算法

    字符串的模式匹配詳解--BF算法與KMP算法

    這篇文章記錄一下串里面的模式匹配,模式匹配,顧名思義就是給定一個(gè)被匹配的字符串,然后用一個(gè)字符串模式(模型)去匹配上面說的字符串,看后者是否在前者里面出現(xiàn)。常用的有2種算法可以實(shí)現(xiàn),下面我們來具體探討下
    2014-08-08
  • C/C++數(shù)據(jù)對(duì)齊詳細(xì)解析

    C/C++數(shù)據(jù)對(duì)齊詳細(xì)解析

    通常我們?cè)趯懘a的時(shí)候是不需要考慮對(duì)齊的影響的,都是依賴編譯器來為我們選擇適合的對(duì)齊策略,我們也可以通過傳遞給編譯器預(yù)編譯指令來指定數(shù)據(jù)對(duì)齊的方法
    2013-10-10
  • C++中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式的方法

    C++中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式的方法

    這篇文章主要介紹了C++中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04

最新評(píng)論