为什么我不能在复制构造函数中使用getter?

时间:2014-02-24 10:04:17

标签: c++

我已经制定了一个复杂的课程如下:

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”做某事的参数。这样安全吗?

我不是母语人士。抱歉我的英语不好。

1 个答案:

答案 0 :(得分:10)

由于您传递const引用(如您所愿),因此您只能调用const方法。制作吸气剂const。无论如何,没有理由不是const

double getRreal() const {
    return real;
}

但是你甚至不需要这样做,你可以直接使用数据成员,并在构造函数初始化列表中进行初始化:

Complex::Complex(const Complex &Z) : real(Z.real)
{
}

或者,如果你关心虚部img(我认为你这样做),只需让编译器生成的复制构造函数做它的事情,并删除你自己的。那将是最好的解决方案。