我需要重载哪些运算符才能生成这个词?
类型A的变量A1和A2,变量floatValue的类型为float。
A1 += A2 * floatValue;
我重载了这个操作符
A operator+() const;
A operator+=(const A value);
A operator*(const A value);
friend A operator*(const A val2, float val);
但是,我收到错误" A类没有合适的复制构造函数"
我在班上有这个构造函数
A();
A(float val1, float val2);
A(float value);
感谢您的回答。
答案 0 :(得分:3)
最小例子:
#include <iostream>
using namespace std;
struct foo {
float val;
foo(float val): val(val){}
foo &operator+=(foo const &other) {
this->val += other.val;
return *this;
}
friend foo operator*(foo const &lhs, foo const &rhs) {
return lhs.val*rhs.val;
}
};
int main() {
foo a = 5, b = 6;
a += b * 3;
cout << a.val << endl;
return 0;
}
使用显式构造函数,您可能希望使用此示例:
#include <iostream>
using namespace std;
struct foo {
float val;
explicit foo(float val): val(val){}
foo &operator+=(foo const &other) {
this->val += other.val;
return *this;
}
friend foo operator*(foo const &lhs, float val) {
return foo(lhs.val*val);
}
};
int main() {
foo a(5), b(6);
a += b * 3;
cout << a.val << endl;
return 0;
}
答案 1 :(得分:2)
每当你重载像
这样的赋值运算符时A operator+=(const A value);
您还需要定义一个像
这样的复制构造函数A( const A& );
复制构造函数将由赋值运算符使用。
这是所谓的三规则的一部分。
答案 2 :(得分:0)
当你有这样的功能时:
fun(A a);
此处的参数按值传递,因此您需要为A
创建复制构造函数(以便从另一个实例创建新实例),或者您可以将其更改为引用,因此不需要复制构造函数。
像这样:
A operator+=(const A &value);