关系操作符:<,>,<=,>=,==,!=
默认的,编译器不支持对自定义类的进行关系操作。
例如:
Fraction fa(2,3);
Fraction fb(3,5);
if(fa == fb) //编译器报错,不支持
{
}
在这呢,我们只介绍== 的重载操作
(1)重载类操作符
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
class Fraction{
public:
Fraction():num(1),den(1)
{
}
Fraction(int n,int d):num(n),den(d)
{
}
bool operator ==(const Fraction& other)
{
if(num * other.den == den * other.num)
return true;
return false;
}
public:
int num;//分子
int den;//分母
};
int main()
{
Fraction fa(2,3);
Fraction fb(4,6);
if(fa == fb)
{
printf("equal!");
}
return 0;
}
(2)重载全局操作符
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
class Fraction{
public:
Fraction():num(1),den(1)
{
}
Fraction(int n,int d):num(n),den(d)
{
}
public:
int num;//分子
int den;//分母
};
bool operator ==(const Fraction& a,const Fraction& b)
{
if(a.num * b.den == a.den * b.num)
return true;
return false;
}
int main()
{
Fraction fa(2,3);
Fraction fb(4,6);
if(fa == fb)
{
printf("equal!");
}
return 0;
}
最后展示一下字符串的比较
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
class Text{
public:
Text(const char* str)
{
m_size = strlen(str)+1;
m_buf = new char[m_size];
strcpy(m_buf,str);
}
~Text()
{
delete [] m_buf;
}
bool operator ==(const Text& other)
{
if(strcmp(m_buf,other.m_buf) == 0)
return true;
return false;
}
public:
int m_size;
char* m_buf;
};
int main()
{
Text t1("heloworld");
Text t2("heloworld");
if(t1 == t2)
{
printf("Equal!");
}
else
{
printf("Not Equal!");
}
return 0;
}