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

标签 c++

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

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/

相关文章:

c++ - 快速可靠的反射球检测方法

c++ - 从 RGB 值数组生成 BMP 文件

c++ - 无法使简单的 flex 示例正常工作

c++ - 如何在 Qt 中以编程方式向主窗口添加按钮并使用 css 文件更改它们的样式?

c++ - 映射/设置删除迭代器超出范围

c++ - Boost::Asio 线程服务器异步问题。什么都没发生

c++ - Delphi 中 C++ `const` 返回类型的等价物是什么

c++ - 默认分配器是否将 int 归零?

c++ - 在C++中获取相反的结构字段

c++ - "library has no symbol"是什么意思?