重载运算符

假设我们有以下结构体声明:

struct CarType
{
string maker;
int year;
float price;
};

假定我们将mycar声明为该结构的1个对象,并且为该对象的所有数据成员赋值,然后我们编写下面的代码:

if(mycar>2000)
cout<<"My car is more than 2000"<<endl;

C++不知道如何处理这段代码,C++其实不知道是将myCar中的year与2000比较还是myCar中的price与2000比较。我们必须通过编写1个C++能够履行的函数,告知C++如何处理这1情况。
在C++中,2元运算符通常在左侧有1个操作数,右侧有1个操作数,为了编写重载运算符,两个操作数必须有1个是对象,由于重载运算符函数只能为对象编写,而且必须为作用于对象的运算符编写重载运算符函数。如果运算符左侧的操作数是结构的对象,那末全部函数定义通常位于结构定义的内部,然后运算符右侧的操作数作为参数传递给函数。


struct CarType
{
string maker;
int year;
float price;
//重载操作符 >
bool operator >(float number)
{
if(price>number)
return true;
return false;
}
};

一样可以像下述代码调用函数1样:
mycar.operator>(2000)
如果CarType mycar ,yourcar;
if(myCar>yourcar)编译器会报错,由于yourcar不能传递给参数number,它不是1个整型类型,我们可以编写以下代码:

struct CarType
{
string maker;
int year;
float price;
//重载操作符 >
bool operator >(float number)
{
if(price>number)
return true;
return false;
}
bool operator >(CarType yourcar)
{
if(price>yourcar.price)
return true;
return false;
}
};

现在我们定义了两个运算符>函数,调用哪个函数取决于右操作数的类型,C++将试图进行匹配,如果没法匹配,编译器将会报错.
如果我们编写以下代码:

if(2000 < mycar)
cout<<"My car is more than 2000"<<endl;

当左操作数不是对象,而右操作数是对象时,最好将函数定义直接放在结构定义的下面.

struct CarType
{
string maker;
int year;
float price;
//重载操作符 >
bool operator >(float number)
{
if(price>number)
return true;
return false;
}
bool operator >(CarType yourcar)
{
if(price>yourcar.price)
return true;
return false;
}
};
bool operator <(int number ,CarType car)
{
if(car.price > number)
return true;
return false;
}

完全代码以下:

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;

struct CarType
{
string maker;
int year;
float price;
//重载操作符 >
bool operator >(float number)
{
if(price>number)
return true;
return false;
}
bool operator >(CarType yourcar)
{
if(price>yourcar.price)
return true;
return false;
}
};
bool operator <(int number ,CarType car)
{
if(car.price > number)
return true;
return false;
}
//结构和类之间的差别:1结构关键词struct 类关键词class 2.结构中默许公有,类中默许私有.
int main()
{
CarType mycar,yourcar;
mycar.maker="Mercedes";
mycar.year=2014;
mycar.price=45567.7155;
//属于同1个结构的对象之间能进行对象赋值
yourcar=mycar;
yourcar.price=10000;
cout<<"Your car is a:"<<mycar.maker<<endl;
cout<<fixed<<showpoint<<setprecision(2)<<"I will offer $"<<mycar.price⑵00<<" for your car"<<endl;
if(mycar>2000)
cout<<"My car is more than 2000"<<endl;
if(mycar>yourcar)
cout<<"My car is worth more than your car"<<endl;
if(2000 < mycar)
cout<<"My car is more than 2000"<<endl;

mycar.operator>(2000);;
mycar.operator>(yourcar);
operator<(2000,mycar);
return 0;
}

原文链接:http://www.52coder.net/archives/2446.html版权所有.本站文章除注明出处外,皆为作者原创文章,可自由援用,但请注明来源.

波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » 重载运算符

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡