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

C++ Operator overloading class and a struct

本文关键字:结构 重载 运算符 C++      更新时间:2023-10-16

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

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

提前谢谢。

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

"等于运算符",即operator==,用于比较两个对象的相等性。

你可以重载operator=但它必须是类中的。请参阅 http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B,了解类定义之外的内容。

例如

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

不过,我不确定您要用它做什么。

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

您要做的是重载赋值运算符 但是,标准方法是提供一个转换构造函数:

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的分配,而不是构造,这似乎不直观。