我的程序将两个日期与 tda 日期进行比较。该操作必须返回短语“are same”或“are different”:
#include<iostream>
//#include<stdio.h>
#include<string.h>
using namespace std;
struct tfecha {
int dia;
int mes;
int anio;
};
int main()
{
tfecha f1,f2;
cout<<"Ingrese primera fecha:"<<endl;
cin>>f1.dia;
cin>>f1.mes;
cin>>f1.anio;
cout<<"Ingrese segunda fecha:"<<endl;
cin>>f2.dia;
cin>>f2.mes;
cin>>f2.anio;
if(strcmp(f1==f2) {
cout<<"Las fechas son iguales:"<<endl;
} else {
cout<<"Las fechas son diferentes:"<<endl;
}
}
但是,我收到以下错误:
[错误] 'operator ==' 不匹配(操作数类型为 'tfecha' 和 'tfecha')
在最新版本的语言标准 C++20 中,该语言提供了可选的默认比较运算符。所以,就你而言:
struct tfecha {
int dia;
int mes;
int anio;
bool operator==(const tfecha&) const = default;
};
意味着您可以比较
tfecha
的。
要使用 C++20,您必须使用开关
-std=c++20
(对于 g++、clang++)或 /std:c++20
(对于 MSVC)等来调用 C++ 编译器。
看到它正在运行 Godbolt。
其他注意事项:
请不要写
using namespace std
:您不能将
strcmp()
与两个tfecha的比较结果一起使用。
您可以使用以下替代语法来默认比较运算符:
friend bool operator==(tfecha const&, tfecha const&) = default;
这也有效,因为在较新的 C++ 版本中,您可以在类体内定义友元函数。
我不想鼓励你用英语写作。但是,请注意,如果您的代码不仅要供您所在国家/地区的人们阅读 - 他们很可能会一些英语(因为 C++ 本身是用英语指定的,它的关键字也是如此),不太可能知道字段的意思,并且不太可能意识到
tefcha
= t+fecha 并且 fecha 在卡斯特拉诺中表示日期。
如果您想将其用于原始类,则必须定义
operator==
。
此外,
strcmp
用于比较 C 样式字符串(以空字符结尾的字符序列),而不是结构。
#include<iostream>
//#include<stdio.h>
#include<string.h>
using namespace std;
struct tfecha{
int dia;
int mes;
int anio;
// define operator==
bool operator==(const tfecha& t) const {
return dia == t.dia && mes == t.mes && anio == t.anio;
}
};
int main()
{
tfecha f1,f2;
cout<<"Ingrese primera fecha:"<<endl;
cin>>f1.dia;
cin>>f1.mes;
cin>>f1.anio;
cout<<"Ingrese segunda fecha:"<<endl;
cin>>f2.dia;
cin>>f2.mes;
cin>>f2.anio;
// remove strcmp
if(f1==f2){
cout<<"Las fechas son iguales:"<<endl;
}else
{
cout<<"Las fechas son diferentes:"<<endl;
}
}
所以基本上你只需要重载 == 运算符,因为 c++ 不知道如何在你的类中使用它,因此,你需要告诉它如何使用它。尝试这样的事情:
inline bool operator==(const & tfecha lhs, const tfecha& rhs){
if(lhs.dia == rhs.dia && lhs.mes == rhs.mes && lhs.anio == rhs.anio){
return true;
}
else{
return false;
}
}
所以你可以看到,你只需检查所有值是否相同,那么我们就可以说这是同一个对象。
请注意,这在技术上不是同一个对象,要检查您只需检查两个对象的内存位置是否相等。 IE。 &lhs == &rhs.
在 C++20 中,您现在可以简单地告诉编译器生成比较运算符:
struct tfecha{
int dia;
int mes;
int anio;
friend auto operator<=>(tfecha const&, tfecha const&) = default;
friend auto operator==(tfecha const&, tfecha const&) -> bool = default;
};including
然后所有比较都将起作用,包括顺序运算符和不等于。