亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

拷貝構造函數初始化常量的問題

問題:?

對象屬性里面帶常量值的時候,拷貝構造函數就必須使用初始始化列表來給那個常量賦值.比如這樣:

Teacher::Teacher(const Teacher& tea):m_iMax(200)

但是,這樣賦值導致的結果就是會導致使用這個拷貝構造函數實例化出來沒有了另個兩個值.?m_strName, m_iAge,


而如何使用下面的倒可以把上面丟失的兩個值補上來,便這樣感覺又把普通構造函數的初始化列表重復了一次.?有沒有簡單的寫法?

Teacher::Teacher(const Teacher& tea):m_strName("dada"),m_iAge(29),m_iMax(200)




//代碼如下:

#include <iostream>

#include <string>

using namespace std;


class Teacher

{

public:

Teacher(string name="Linda", int age=19, int m = 100);

Teacher(const Teacher& tea); //tea最后是個變量,可寫,可不寫.

void setName(string _name);

string getName();

void setGender(string _gender);

string getGender();

void setAge(int _age);

int getAge();

void teach();

int getMax();

private:

string m_strName;

string m_strGender;

int m_iAge;

const int m_iMax; //最多可帶學生數;只能使用初始化列表;

};

//使用初始化列表來初始化;

Teacher::Teacher(string name, int age, int m):m_strName(name),m_iAge(age), m_iMax(m)

{

cout << "Teacher::Teacher(string name, int age):m_strName(name),m_iAge(age)" << endl;

}


//Teacher::Teacher(const?Teacher&?tea):m_strName("dada"),m_iAge(29),m_iMax(200)
Teacher::Teacher(const?Teacher&?tea):m_iMax(200)

{

cout << "Teacher::Teacher(const Teacher& tea)" << endl;

}


void Teacher::setName(string _name)

{

m_strName = _name;

}

string Teacher::getName()

{

return m_strName;

}

void Teacher::setGender(string _gender)

{

m_strGender = _gender;

}

string Teacher::getGender()

{

return m_strGender;

}

void Teacher::setAge(int _age)

{

m_iAge = _age;

}

int Teacher::getAge()

{

return m_iAge;

}

void Teacher::teach()

{

cout << "現在上課..." << endl;

}

int Teacher::getMax()

{

return m_iMax;

}


int main(void)

{

Teacher t1;

cout << "T1: " << t1.getName() << ", " << t1.getAge() << ", stu: " << t1.getMax() << endl;

Teacher t3 = t1;

cout << "T3: " << t3.getName() << ", " << t3.getAge() << ", stu: " << t3.getMax() << endl;

Teacher t4(t1);

cout << "T4: " << t4.getName() << ", " << t4.getAge() << ", stu: " << t4.getMax() << endl;

}



運行結果;

Teacher::Teacher(string name, int age):m_strName(name),m_iAge(age)

T1: Linda, 19, stu: 100

Teacher::Teacher(const Teacher& tea)

T3: , 0, stu: 200

Teacher::Teacher(const Teacher& tea)

T4: , 1073741824, stu: 200


正在回答

1 回答

題主是想像默認構造函數那樣沒聲明的值自動賦值是嗎?我覺得必須是構造函數括號里的參數才能自動賦值,而初始化列表和參數不一樣,所以不能自動賦值。

可以把

Teacher(const Teacher& tea);?

改成

Teacher(const Teacher& string name="Linda", int age=19, int m = 100);

試一下。(我也只是個萌新,如果說錯了還請指正

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
C++遠征之封裝篇(上)
  • 參與學習       103391    人
  • 解答問題       732    個

封裝--面向對象的基石,本教程力求幫助小伙伴們即學即會

進入課程

拷貝構造函數初始化常量的問題

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號