您的位置:首页 > 编程语言 > C语言/C++

C++运算符重载练习

2016-11-09 16:26 357 查看
声明和定义放在不同的文件:

#ifndef _SALES_ITEM_H_
#define _SALE_ITEM_H_
#include <string>
#include <iostream>
class Sales_item
{
public:
Sales_item() {std::cout<<"Sales_item()"<<std::endl;}
Sales_item(std::string isbn,unsigned num,double price):ISBN(isbn),num(num),price(price){std::cout<<"Sales_item(std::string isbn,unsigned num,double price)"<<std::endl;}
Sales_item(const Sales_item& obj);
~Sales_item();
std::string isbn(){return ISBN;}
Sales_item& operator=(const Sales_item& obj);
Sales_item operator+(const Sales_item& obj);
Sales_item& operator+=(const Sales_item& obj);
friend std::istream& operator>>(std::istream& in,Sales_item& obj);
friend std::ostream& operator<<(std::ostream& out,const Sales_item& obj);
void display();
private:
std::string ISBN;
unsigned num = 0;
double price = 0.0;
};

#endif
类成员的实现:
#include "sales_item.h"
#include <iostream>

using namespace std;

Sales_item::Sales_item(const Sales_item& obj)
{
cout<<"Sales_item::Sales_item(const Sales_item& obj)"<<endl;
ISBN = obj.ISBN;
num = obj.num;
price = obj.price;
}

Sales_item::~Sales_item()
{
cout<<"Sales_item::~Sales_item()"<<endl;
ISBN = "";
num = 0;
price = 0.0;
}

Sales_item& Sales_item::operator=(const Sales_item& obj)
{
cout<<"ISBN:"<<ISBN<<"\tobj.ISBN:"<<obj.ISBN<<endl;
if(ISBN == obj.ISBN)
{
num = obj.num;
price = obj.price;
}

return *this;
}

Sales_item Sales_item::operator+(const Sales_item& obj)
{
cout<<"operator+:"<<ISBN<<"\t"<<obj.ISBN<<endl;
Sales_item tmp;
if(ISBN == obj.ISBN)
{
tmp.ISBN = ISBN;
tmp.num = num + obj.num;
tmp.price = price;
}

return tmp;
}

Sales_item& Sales_item::operator+=(const Sales_item& obj)
{
cout<<"Sales_item& Sales_item::operator+=(const Sales_item& obj)"<<endl;
if(ISBN == obj.ISBN)
{
num += obj.num;
}
return *this;
}

istream& operator>>(istream& in,Sales_item& obj)
{
in>>obj.ISBN>>obj.num>>obj.price;
return in;
}

ostream& operator<<(ostream& out,const Sales_item& obj)
{
out<<obj.ISBN<<"\t"<<obj.num<<"\t"<<obj.price;
return out;
}

void Sales_item::display()
{
cout<<ISBN<<"\t"<<num<<"\t"<<price<<endl;
}
下面是测试程序:
#include "sales_item.h"
#include <iostream>

using namespace std;

int main()
{
Sales_item obj1("sss",4,2.3);
Sales_item obj2("sss",7,2.7);
Sales_item obj3(obj2);
obj1 = obj2;
obj1.display();
obj2.display();
cout<<"++++++++++++++++++++++"<<endl;
Sales_item obj4 = obj1 + obj2;
obj2 += obj2;
obj4.display();
obj2.display();
Sales_item obj5;
cin>>obj5;
obj5.display();
cout<<obj5<<endl;
return 0;
}
运行结果如图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: