使用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
。对于后者,您需要常规函数,而不是成员函数。你需要将它声明为friend
的Solution
,以便它可以访问私人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 ==进行结构重载的主要内容,如果未能解决你的问题,请参考以下文章