拷貝構造函數初始化常量的問題
問題:?
對象屬性里面帶常量值的時候,拷貝構造函數就必須使用初始始化列表來給那個常量賦值.比如這樣:
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
2021-01-15
題主是想像默認構造函數那樣沒聲明的值自動賦值是嗎?我覺得必須是構造函數括號里的參數才能自動賦值,而初始化列表和參數不一樣,所以不能自動賦值。
可以把
Teacher(const Teacher& tea);?
改成
Teacher(const Teacher& string name="Linda", int age=19, int m = 100);
試一下。(我也只是個萌新,如果說錯了還請指正