C++运算符重载练习

声明和定义放在不同的文件:

#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;
}
运行结果如图:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值