0

我正在尝试做一些我不完全确定甚至可能的事情。我正在尝试重载一个等于运算符,如下所示:

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

提前谢谢。

4

3 回答 3

3

operator=是一个赋值运算符,只能在赋值的类中被覆盖。所以在你的情况下,它必须在里面声明A

“等于运算符”,即 ,operator==用于比较两个对象是否相等。

于 2012-11-20T16:01:10.997 回答
2

你可以超载operator=,但它必须在课堂上。有关类定义之外的内容,请参见http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B 。

例如

class foo {
  foo& operator=(B b) {
    //...
    return *this;
  };
};

我不完全确定你想用它做什么。

此外,它是赋值运算符 - 不要将其称为等于运算符。

于 2012-11-20T15:59:32.513 回答
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但是只允许从to分配A而不是构造似乎不直观。

于 2012-11-20T16:01:25.317 回答