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;
}
运行结果如图:
#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;
}
运行结果如图:
相关文章推荐
- C++运算符重载基础性练习
- C++运算符的重载
- C++运算符重载 成员函数与友元函数
- 黑马程序员----【javaSE基础】代码练习--重载与重写
- 类定义,封装,构造方法,构造方法重载练习
- C++运算符重载 成员函数与友元函数详解
- C++运算符重载补充之不同数据间的类型转换
- C++运算符重载的规则
- C++运算符重载
- 继承之调用基类构造函数知识点和思考练习(用了三层继承,重载了各层的构造函数,以期全面实验调用基类构造函数)
- 【C++】C++运算符重载-基础
- C++运算符重载
- c++运算符重载中的两种形式以及常引用的使用
- C++运算符重载讲解与经典实例
- C++运算符重载(9) - 自增和自减
- C++运算符重载
- C++运算符重载
- C++运算符重载的方法详细解析
- 计算时间:一个C++运算符重载示例
- c++运算符重载总结