繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM