使用operator ==进行结构重载

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用operator ==进行结构重载相关的知识,希望对你有一定的参考价值。

我编写用于将罗马转换为整数的算法(下面的代码),我得到错误'这个函数的参数太多了',但是我需要两个参数来进行比较。有人知道如何修复我的代码吗?

#include <iostream>
using namespace std;

int main() {
  class Solution {
  private:
    struct symbol {
      char upperCase;
      char lowerCase;
      bool operator ==(char& a, symbol& b) { // ERROR: too many parametres for this function 
        return a == b.upperCase;
      };
    };
    const symbol one {'I', 'i'};
    // ...
    const symbol thousand {'M', 'm'};
  public:
    int romanToInt(string s) {
    // ...
    }
  };
  return 0;
}
答案

运算符的左参数是自动this对象,您无需在参数列表中指定这两个参数。

bool operator== (char& a) {
    return a == upperCase;
}

然而,这只允许symbol == char,而不是char == symbol。对于后者,您需要常规函数,而不是成员函数。你需要将它声明为friendSolution,以便它可以访问私人symbol类。

  class Solution {
  private:
    struct symbol {
      char upperCase;
      char lowerCase;
      bool operator ==(const char& a) { // ERROR: too many parametres for this function 
        return a == upperCase;
      };
    };
    const symbol one {'I', 'i'};
    // ...
    const symbol thousand {'M', 'm'};
  public:
    int romanToInt(string s) {
    // ...
    }
    friend bool operator==(const char&, const symbol&)
  };

bool operator==(const char&a, const Solution::symbol& b) {
  return a == b.uppercase;
}
另一答案

你最好为symbol对象设置一个重载,为char提供另一个重载:

  bool operator ==(symbol& b)
  {
    return (b.upperCase==upperCase);
  }
  bool operator ==(char& a)
  {
   return a == upperCase;
  }

在重载等于运算符时,针对当前实例(即this)检查唯一参数。

以上是关于使用operator ==进行结构重载的主要内容,如果未能解决你的问题,请参考以下文章

重载 operator() 在 Cython 中失败

Elixir Operator重载:使用宏定义独占范围

void()、逗号运算符 (operator,) 和不可能的 (?) 重载

c++ 拷贝构造函数与赋值运算符重载函数的区别是

重载 << 运算符:带有结构向量的结构

操作符重载