[英]Why can't I use a getter in a copy constructor?
我已经制定了一个复杂的课程如下:
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”做某事的参数。 安全吗?
我不是母语人士。 抱歉我的英语不好。
由于您传递的是const
引用(如您所愿),因此只能调用const
方法。 使得getter const
。 无论如何,它没有理由不是const
。
double getRreal() const {
return real;
}
但是你甚至不需要这样做,你可以直接使用数据成员,并在构造函数初始化列表中进行初始化:
Complex::Complex(const Complex &Z) : real(Z.real)
{
}
或者,如果你关心虚构的部分img
(我认为你这样做),只需让编译器生成的复制构造函数做它的东西,并删除你自己的东西。 那将是最好的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.