The_Icer
2016-08-14 06:43
采纳率: 62.5%
浏览 1.0k
已采纳

一个关于C++运算符重载的问题

#include
using namespace std;
class Com{
public:
Com(double i,double j){i=i;j=j;}
Com(Com&c):i(c.i),j(c.j){}
void show(){cout<<i<<"+"<<j<<"i";}
Com operator+(Com c){return Com(i+c.i,j+c.j); }
private:
double i,j;
};
上面这个代码有错吗?为什么我 没写复制构造函数就不会有问题,写了就报错[Error] no matching function for call to 'Com::Com(Com)'?求教

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • lm_whales 2016-08-14 07:29
    已采纳

    1)//拷贝构造函数 应为为
    Com(const Com&c):i(c.i),j(c.j){};
    C++11: 最好写两个 拷贝构造函数,一个拷贝,一个移动
    Com(const Com&c):i(c.i),j(c.j){};
    Com(Com&&c):i(c.i),j(c.j){};

    2)//成员函数方式重载双目运算符,一般写成这样。
    Com &operator+(const Com &c){(i+=c.i;j+=c.j;return this;);
    }

    3) 双目运算符最好重载为友元函数,这样两个参数都可以是 const T& 类型参数,适应性也比较好。

    打赏 评论
  • Zmyths 2016-08-14 08:29

    赋值运算符重载,返回的因为是一个引用,你可以看我一篇博客,很详细的构造,拷贝构造,赋值运算符的区别和实现。

    打赏 评论