14.1 Sales_item class

本文介绍了一个用于处理图书销售数据的C++类Sales_item。该类包含操作符重载,如输入/输出、比较和算术操作,以及成员函数来获取和设置数据,如平均价格和ISBN号。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Sales_item.h

#pragma once
#include <iostream>
#include <string>

class Sales_item {
    friend std::ostream &operator<<(std::ostream &out, const Sales_item &s);
    friend std::istream &operator>>(std::istream &in, Sales_item &s);
    friend bool operator==(const Sales_item &lhs, const Sales_item &rhs);
    friend bool operator!=(const Sales_item &lhs, const Sales_item &rhs);
    friend bool operator<(const Sales_item &lhs, const Sales_item &rhs);
public:
    Sales_item() :bookNo(), unit_sold(0), revenue(0) {};
    Sales_item(const std::string &s) : bookNo(s), unit_sold(0), revenue(0) {};
    Sales_item(const Sales_item &obj) : bookNo(obj.bookNo), unit_sold(obj.unit_sold), revenue(obj.revenue) {}
    Sales_item(std::istream &in) {
        in >> bookNo >> unit_sold >> revenue;
    }

    Sales_item operator+=(const Sales_item &);
    Sales_item &operator=(const std::string &s);
    Sales_item &operator=(const Sales_item &s);
    std::string get_boolNo() const;
    double avg_price() const;

private:
    std::string bookNo;
    unsigned unit_sold;
    double revenue;
};

Sales_item operator+(const Sales_item &lhs, const Sales_item &rhs);

Sales_item.cpp

#include "Sales_item.h"

std::ostream &operator<<(std::ostream &out, const Sales_item &s) {
    out << s.bookNo << " " << s.revenue << " " << s.unit_sold << s.avg_price();
    return out;
}

std::istream &operator>>(std::istream &in, Sales_item &s) {
    double price;
    in >> s.bookNo >> s.unit_sold >> price;
    if (in) {
        s.revenue = s.unit_sold * price;
    } else {
        s = Sales_item();
    }
    return in;
}

bool operator==(const Sales_item &lhs, const Sales_item &rhs) {
    return 
           lhs.bookNo == rhs.bookNo &&
           lhs.unit_sold == rhs.unit_sold &&
           lhs.revenue == rhs.revenue;
}

bool operator!=(const Sales_item &lhs, const Sales_item &rhs) {
    return !(lhs == rhs);
}

bool operator<(const Sales_item &lhs, const Sales_item &rhs) {
    return lhs.revenue < rhs.revenue;
}

Sales_item Sales_item::operator+=(const Sales_item &s) {
    Sales_item ret;
    ret.bookNo = bookNo;
    ret.unit_sold = unit_sold + s.unit_sold;
    ret.revenue = revenue + s.revenue;
    return ret;
}

Sales_item &Sales_item::operator=(const std::string &s) {
    Sales_item tmp(s);
    *this = tmp;
    return *this;
}

Sales_item &Sales_item::operator=(const Sales_item &s) {
    bookNo = s.bookNo;
    unit_sold = s.unit_sold;
    revenue = s.revenue;
    return *this;
}

std::string Sales_item::get_boolNo() const {
    return bookNo;
}

double Sales_item::avg_price() const {
    return revenue/unit_sold;
}

Sales_item operator+(const Sales_item &lhs, const Sales_item &rhs) {
    Sales_item ret;
    ret+=lhs;
    ret+=rhs;
    return ret;
}```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值