我已经制定了一个复杂的课程如下:
class Complex{
public:
Complex(const Complex &);
double getRreal(){
return real;
}
private:
double real, img;
};
Complex::Complex(const Complex &Z){
real = Z.getReal();
}
但是,编译器给出了一个错误:
将'const Complex'作为'double Complex :: getReal()'的'this'参数传递,丢弃限定符
这个错误是什么意思?
顺便说一句,我知道我可以简单地使用
real = Z.real;
将实际部分从Z复制到“this”,但我认为它是有线的,因为我可以访问和修改输入对象“Z”中的私有数据。虽然对象Z也是类“Complex”的实例,但这里我们实际上并没有针对Z做“做某事”.Z只是函数为对象“this”做某事的参数。这样安全吗?
我不是母语人士。抱歉我的英语不好。
答案 0 :(得分:10)
由于您传递const
引用(如您所愿),因此您只能调用const
方法。制作吸气剂const
。无论如何,没有理由不是const
。
double getRreal() const {
return real;
}
但是你甚至不需要这样做,你可以直接使用数据成员,并在构造函数初始化列表中进行初始化:
Complex::Complex(const Complex &Z) : real(Z.real)
{
}
或者,如果你关心虚部img
(我认为你这样做),只需让编译器生成的复制构造函数做它的事情,并删除你自己的。那将是最好的解决方案。