sairate 4108f6c42d docs(book): 添加现代 C++教程及相关代码
- 新增现代 C++ 教程的 Preface 章节,包括英文和中文版本
- 添加 C++ Primer 练习代码
- 新增 Learn C++ 教程的 C++ 开发简介章节
- 添加头文件解析文档
- 更新 mkdocs.yml,包含新教程的目录结构
- 修改项目设置,使用 Python 3.10环境
2025-07-06 16:14:43 +08:00

73 lines
2.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// Created by ChenYL on 2022/5/14.
//
#ifndef PAT_SALES_DATA_H
#define PAT_SALES_DATA_H
# include <iostream>
# include <string>
class Sales_data {
friend std::istream& operator >> (std::istream&, Sales_data&);
friend std::ostream& operator >> (std::ostream&, const Sales_data&);
friend bool operator < (const Sales_data&, const Sales_data&);
friend bool operator == (const Sales_data&, const Sales_data&);
public:
Sales_data() = default;
Sales_data(const std::string &book):bookNo(book) { }
Sales_data(std::istream &is) {is >> *this;}
public:
Sales_data& operator += (const Sales_data&);
std::string isbn() const { return bookNo;}
private:
std::string bookNo; //书籍编号
unsigned units_sold = 0; //销售量
double selling_price = 0.0; //原始价格
double sale_price =0.0; //市售价格
double discount = 0.0; //折扣
};
inline bool compareIsbn(const Sales_data &lhs, const Sales_data &rhs) {
return lhs.isbn() == rhs.isbn();
}
inline bool operator !=(const Sales_data &lhs, const Sales_data &rhs) {
return !(lhs == rhs); //基于运算符==给出!=的定义
}
Sales_data& Sales_data::operator+=(const Sales_data& rhs) {
units_sold += rhs.units_sold;
sale_price = (rhs.sale_price * rhs.units_sold + sale_price * units_sold) / (rhs.units_sold + units_sold);
if (selling_price != 0)
discount = sale_price / selling_price;
return *this;
}
Sales_data operator + (const Sales_data &lhs, const Sales_data &rhs)
{
Sales_data ret(lhs);//把hs的内容拷贝到临时变量ret中这种做法便于运算
ret += rhs; //把rhs的内容加入其中
return ret; //返回ret
}
std::istream& operator >> (std::istream& in, Sales_data& s) {
in >> s.bookNo >> s.units_sold >> s.selling_price >> s.sale_price;
if (in && s.selling_price != 0)
s.discount = s.sale_price / s.selling_price;
else
s = Sales_data();//输入错误,重置输入的数据
return in;
}
std::ostream& operator << (std::ostream& out,const Sales_data& s)
{
out << s.isbn();
// out << s.isbn() <<" " << s.units_sold << " "<< s.selling_price <<""<< s.sale_price <<""<< s.discount;
return out;
}
#endif //PAT_SALES_DATA_H