【发布时间】:2015-09-27 11:32:53
【问题描述】:
复制构造函数和重载的“=”运算符在分配两个类对象之和的结果时不会被调用。初始化和分配单个对象时可以正常工作。错误提示“‘operator=’不匹配(操作数类型为‘comp’和‘comp’)”。重要代码sn-ps是
class comp
{
int a,b;
public:
comp()
{
a=b=1;
}
comp(int,int);
comp(comp &);
comp operator+(comp &);
operator int();
void show()
{
cout<<"a= "<<a<<"b= "<<b<<endl;
}
comp& operator=(comp &);
friend ostream &operator<<(ostream &out, comp &c);
};
comp::comp(comp & c)//copy constructor
{
a=c.a,b=c.b;
cout<<"copy constructor called"<<endl;
}
comp comp::operator+(comp & c1)// overloaded '+' opreator
{
comp c;
c.a=a+c1.a;
c.b=b+c1.b;
return c;
}
comp & comp::operator =(comp & c)// I tried with return type as void also
{
cout<<"in operator ="<<endl;
a=c.a,b=c.b;
return *this;
}
int main()
{
comp c1,c2(2,3),c3;
c3=c2+c1;
cout<<c3;
comp c4=c3+c1;
cout<<c4;
int i=c4;
cout<<i;
return 0;
}
【问题讨论】:
-
你尝试过使用 const-ref 吗?即 comp & comp::operator =(comp const & c) (与您的复制构造函数相同)
-
comp(comp &)不是复制构造函数。comp(comp const&)是。同理comp& operator=(comp&)不是赋值操作符,而是后面会让人头疼的东西。 -
谢谢 Cechner,当我使用 const-ref 时它可以工作。但是我对comp c4 = c3 + c1这一行有另一个疑问,没有调用复制构造函数,而是调用了默认构造函数。为什么会这样?
标签: c++11 copy-constructor assignment-operator