#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)'?求教

一个关于C++运算符重载的问题
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
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& 类型参数,适应性也比较好。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报