这是我的代码:
class Example {
...declarations/definitions...
};
Example operator + (Example e)
{
Example temp;
...do addition...
return temp;
}
//main
void main()
{
Example a(1,2);
Example b(3,4);
Example c;
c = a+b;
}
现在让我感到困惑的是,我不得不重载+运算符以使其与向量一起工作但是等于'='符号怎么样?我正在将一个向量分配给另一个,我不应该重载它吗?或者它已经提供给我们了? 感谢。
答案 0 :(得分:4)
如果您的类是默认可分配的,则该语言会自动为您提供默认operator=
(例如,如果它有任何引用成员,则在没有您的特殊工作的情况下它将无法分配)。它所做的就是分别为基地和每个成员分配。
答案 1 :(得分:3)
[赋值运算符]的默认版本执行成员复制,其中每个成员都由其自己的复制赋值运算符复制(也可以是程序员声明的或编译器生成的)。
答案 2 :(得分:2)
如果你没有在你的类中声明一个拷贝赋值运算符,那么就会为你隐式声明一个(如果你曾经使用它,则会隐式定义)。
如果可能,隐式运算符将指定对象的每个成员;否则(如果某个成员是引用,或const
,或者有私有或已删除的复制赋值运算符),您将收到编译错误。
同样,如果您没有声明复制构造函数,那么您将获得一个隐式复制构造函数,它将复制每个成员。您的代码正在operator+
中使用它来复制参数和返回值。
答案 3 :(得分:1)
默认情况下,赋值运算符与复制构造函数和默认构造函数一起给出。它将每个数据成员的值分配给另一个对象中的相应数据成员(即浅拷贝)。
答案 4 :(得分:0)
A std::vector
?如果是这样,std::vector
默认实现赋值运算符。从联机帮助页:
“将矢量x的副本指定为矢量对象的新内容。
调用前向量对象中包含的元素将被删除,并替换为向量x中的元素的副本(如果有)。
调用此成员函数后,向量对象和向量x将具有相同的大小并且相互比较相等。“
编辑 - 其中一天我将首先提交答案!答案 5 :(得分:0)
C ++提供了default copy constructor for you that is used for assignment,它使用它们(也可能是默认的)副本构造函数按成员复制类成员。