【问题标题】:C++ Operator overloading class and a structC++ 运算符重载类和结构
【发布时间】:2012-11-21 00:07:34
【问题描述】:

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

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

提前谢谢。

【问题讨论】:

    标签: c++ operator-overloading


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      例如

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

      不过我不太确定你想用它做什么。

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

      【讨论】:

        【解决方案3】:

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

        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 的赋值而不是构造似乎不直观。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-08
          • 1970-01-01
          • 2016-02-19
          • 2020-09-14
          相关资源
          最近更新 更多