C ++运算符重载类和结构

时间:2012-11-20 15:55:35

标签: c++ operator-overloading

我正在尝试做一些我不太确定的事情。我正在尝试重载一个像这样的等于运算符:

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 =用于执行诸如将一个相同类型的对象设置为等于另一个对象的事情。或者这可能会做,但我做错了。

提前谢谢。

3 个答案:

答案 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&);

但是仅允许从BA的分配似乎不直观,而不是构造。