C++运算符的重载
来源:互联网 发布:js 数组长度 编辑:程序博客网 时间:2024/06/08 10:03
定义SaleData类
#ifndef _SALEDATA__#define _SALEDATA__#include <string>#include <iostream>class SaleData{ //数据成员private: std::string bookNo; unsigned sold = 0; double revenue = 0.0; //成员函数public: //构造函数 SaleData() = default; //默认构造函数 SaleData(const std::string &s) :bookNo(s) {}; SaleData(const std::string &s, unsigned n, double p) :bookNo(s), sold(n), revenue(n*p) {}; SaleData(std::istream &is); //只声明,类外定义; std::string isbn() const { return bookNo; } //(类中定义的函数为隐藏的inline函数),只在类中声明则不是;//重载运算符 SaleData & operator+=(const SaleData &); //SaleData类类型重载复合赋值运算符 += //声明友元 friend std::istream &operator>>(std::istream &is, SaleData &item); //SaleData类类型重载运算符 >>,输入 friend std::ostream & operator<<(std::ostream &, const SaleData &); //SaleData类类型重载运算符 >> ,输出 friend bool operator==(const SaleData &, const SaleData &); //SaleData类类型重载运算符 == ,相等 friend bool operator!=(const SaleData &, const SaleData &); //SaleData类类型重载运算符 != ,不等 friend SaleData operator+(const SaleData &, const SaleData &);////SaleData类类型重载运算符 + ,相加};//后面实现为SaleData类类型重载运算符 >>,输入std::istream &operator>>(std::istream &is, SaleData &item);//后面实现为SaleData类类型重载运算符 >>,输出std::ostream & operator<<(std::ostream &, const SaleData &);//SaleData类类型重载运算符 == ,相等bool operator==(const SaleData &, const SaleData &);//SaleData类类型重载运算符 != ,不等bool operator!=(const SaleData &, const SaleData &);//SaleData类类型重载运算符 + ,相加SaleData operator+(const SaleData &, const SaleData &);#endif
重载输出运算符<<:参考C++ primer P494
注意:非成员函数要声明为类的友元;
例子:
std::ostream & operator<<(std::ostream &os, const SaleData &item){ os << item.isbn() << " " << item.sold << " " << item.revenue << " " << item.avg_value(); return os;}
重载输入运算符>>:参考C++ primer P495
std::istream &operator>>(std::istream &is, SaleData &item){ double price; is >> item.bookNo >> item.sold >> price; // while (!(is.good()))//检测流是否处于有效状态 { //当输入流遇到错误 //可以在此添加提示: is.clear();//恢复流错误 //重新输入 is >> item.bookNo >> item.sold >> price; } item.revenue = item.sold*price; return is;}
重载相等运算符==:参考C++ primer P497
bool operator==(const SaleData &item1, const SaleData &item2){ //比较每一个数据成员,如果类中的数据成员为其他类类型,则其他类类型必须具有重载了==运算符 return item1.isbn() == item2.isbn() && item1.sold == item2.sold && item1.revenue == item2.revenue;}
重载不等运算符!=:参考C++ primer P497
bool operator!=(const SaleData &item1, const SaleData &item2){ return !(item1 == item2); //事先重载==运算符}
重载复合赋值运算符 += 参考C++ primer P500
注意:复合赋值运算符和赋值运算符应该为类的成员函数
SaleData &SaleData::operator+=(const SaleData &item){ sold += item.sold; revenue += item.revenue; return *this;}
重载运算符 + 参考C++ primer P497
SaleData operator+(const SaleData &item1, const SaleData &item2){ SaleData sum = item1; //事先要重载赋值运算符 = sum += item2;//事先要重载复合赋值运算符 += return sum;}
0 0
- c++-运算符的重载
- C++--运算符的重载
- [C/C++]运算符的重载
- C++-运算符重载
- [C++]重载运算符
- C#:运算符重载
- c++-++运算符重载
- C++:重载运算符
- 运算符重载(C++)
- [c++]运算符重载
- 【C++】运算符重载
- C++--------------------------------------------运算符重载
- C#:运算符重载
- C++:运算符重载
- C++:运算符重载
- C#:运算符重载
- [C++]运算符重载
- 【c++】运算符重载
- (二)、变量的声明
- HDU 5792 World is Exploding
- win7 64位下安装和配置python2.7.6及其库管理工具
- Muduo库的框架剖析及总结(一)
- Emacs用Magit管理git项目
- C++运算符的重载
- HDU 1007 Quoit Design 最小点对基础模板
- tomcat目录结构及配置文件说明
- 汉字转拼音
- java网络通讯(UDP与TCP)
- poj 3233 Matrix Power Series 二分求和式
- 用刚学的html为女朋友做个生日礼物
- 数据结构实验之排序三:bucket sort
- day8-6(一)