我已经制定了一个复杂的类如下:
class Complex{
public:
Complex(const Complex &);
double getRreal(){
return real;
}
private:
double real, img;
};
Complex::Complex(const Complex &Z){
real = Z.getReal();
}
但是,编译器给我一个错误:
passing ‘const Complex’ as ‘this’ argument of ‘double Complex::getReal()’ discards qualifiers
这个错误是什么意思?
顺便说一句,我知道我可以简单地使用
real = Z.real;
将实部从 Z 复制到“this”,但我认为它是有线的,因为我可以访问和修改输入对象“Z”中的私有(private)数据。尽管对象 Z 也是类“Complex”的一个实例,但这里我们实际上并不是要为 Z“做某事”。Z 只是函数为对象“this”做某事的参数。安全吗?
我不是母语人士。抱歉我的英语不好。
最佳答案
由于您正在传递一个 const
引用(正如您应该的那样),您只能调用 const
方法。使 setter/getter const
。无论如何,没有理由不是 const
。
double getRreal() const {
return real;
}
但你甚至不需要这样做,你可以直接使用数据成员,并在构造函数初始化列表中进行初始化:
Complex::Complex(const Complex &Z) : real(Z.real)
{
}
或者,如果您关心虚部 img
(我想您会关心),只需让编译器生成的复制构造函数执行其操作,然后删除您自己的。那将是最好的解决方案。
关于c++ - 为什么我不能在复制构造函数中使用 getter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21984441/