我正在尝试做一些我不太确定的事情。我正在尝试重载一个像这样的等于运算符:
Class A //Defined somewhere
Struct B{
float bobsAge;
};
B& operator=(A,B){
A.GetAge("bob",B.bobsAge);
return B;
}
Function(getAge){
A Names;
B structNames;
structNames = Names;
}
我理解这可能是不可能的,因为据我所知,operator =用于执行诸如将一个相同类型的对象设置为等于另一个对象的事情。或者这可能会做,但我做错了。
提前谢谢。
答案 0 :(得分:3)
operator=
是一个赋值运算符,只能覆盖在中指定的类。所以在你的情况下,它必须在A
内声明。
"等于运营商,"也就是说,operator==
用于比较两个对象是否相等。
答案 1 :(得分:2)
你可以重载operator=
但它必须是课堂上的。有关类定义之外的内容,请参阅http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B。
e.g。
class foo {
foo& operator=(B b) {
//...
return *this;
};
};
我不确定你要用它做什么。
此外,它是赋值运算符 - 不要将它称为等于运算符。
答案 2 :(得分:1)
您要做的是重载赋值运算符但是,标准方法是提供转换构造函数:
class A
{
public:
A(const B& b) { GetAge("bob", b.bobsAge; }
};
然后让隐式转换为诸如
之类的表达式启动A a;
B b;
a = b; // Assignment: calls A(const B&), and uses A's default assignment operator
A a2 = b; // Construction: calls A(const B&) and A(const A&)
您可以提供一个赋值运算符
A& operator=(const B&);
但是仅允许从B
到A
的分配似乎不直观,而不是构造。