#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)'?求教
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& 类型参数,适应性也比较好。
赋值运算符重载,返回的因为是一个引用,你可以看我一篇博客,很详细的构造,拷贝构造,赋值运算符的区别和实现。