為什么拷貝函數(shù) 有cosnt不行呢?
#include <stdlib.h>
#include <string>
#include <iostream>
#include <QDebug>
using namespace std;
class Teacher
{
public:
? Teacher(string name = "ti", int _age = 100);
? Teacher(const Teacher &tea);
? const double m_dPi;
};
Teacher::Teacher(string name, int _age)
? :m_dPi(8)
{
? ?cout << "teacher init is run !\n" << endl;
}
Teacher::Teacher(const Teacher &tea)
{
? ? cout <<"Teacher::Teacher(const Teacher &tea)"<<endl;
}
int main()
{
? ?Teacher t;
? ?Teacher t1 = t;
}
?我發(fā)現(xiàn) 把?const double m_dPi;改成?double m_dPi;就可以了,
但是不知道為什么?
2016-12-08
你把m_dPi在類中定義成常量, 就意味在只能在構(gòu)造函數(shù)中使用初始化列表的方式來初始化, 可是你的復(fù)制構(gòu)造函數(shù)卻沒有用初始化列表的方式來初始化m_dPi的值, 所以編譯出錯(cuò)。
所以這也能解釋為什么你把m_dPi定義成變量編譯器就可以通過了。
你也可以把復(fù)制構(gòu)造函數(shù)這么修改:
Teacher::Teacher(const Teacher &tea) :m_dPi(8)
{
? ? cout <<"Teacher::Teacher(const Teacher &tea)"<<endl;
}
其實(shí)理解了默認(rèn)的復(fù)制構(gòu)造函數(shù)原理就好理解了, 系統(tǒng)默認(rèn)的構(gòu)造函數(shù)是單純的去給相應(yīng)的值去對(duì)應(yīng)復(fù)制, 可是我們聲明的m_dPi是常量, 一旦作為左值被賦值編譯器就會(huì)報(bào)錯(cuò)。
個(gè)人理解,歡飲糾錯(cuò)。
2018-08-31
66666666666
2016-11-29
我也有相同的問題,求解