C++ //练习 16.3 对两个Sales_data对象调用你的compare函数,观察编译器在实例化过程中如何处理错误。

C++ Primer(第5版) 练习 16.3

练习 16.3 对两个Sales_data对象调用你的compare函数,观察编译器在实例化过程中如何处理错误。

环境:Linux Ubuntu(云服务器)
工具:vim

 

解释
/*************************************************************************
	> File Name: ex16.3.cpp
	> Author: 
	> Mail: 
	> Created Time: Tue 30 Jul 2024 08:13:05 AM CST
 ************************************************************************/

#include<iostream>
using namespace std;

struct Sales_data{
    Sales_data(const string &s, unsigned n, double p):
                bookNo(s), units_sold(n), price(p), revenue(p * n) {}
    Sales_data(): Sales_data("", 0, 0) {}
    Sales_data(string s): Sales_data(s, 0, 0) {}

    friend istream &operator>>(istream &, Sales_data &);
    friend ostream &operator<<(ostream &, const Sales_data &);

    Sales_data& operator+= (Sales_data &);

    string isbn() const;
    Sales_data& combine(const Sales_data&);
    double avg_price() const;

    string bookNo;
    unsigned units_sold = 0;
    double price = 0.0;
    double revenue = 0.0;
};

string Sales_data::isbn() const{
    return this->bookNo;
}

Sales_data& Sales_data::combine(const Sales_data &rhs){
    units_sold += rhs.units_sold;
    revenue += rhs.revenue;
    price = rhs.price;
    bookNo = rhs.bookNo;
    return *this;
}

double Sales_data::avg_price() const{
    if(units_sold){
        return revenue / units_sold;
    }
    else{
        return 0;
    }
}

Sales_data& Sales_data::operator+= (Sales_data &sd){
    this->combine(sd);
    return *this;
}

ostream &operator<<(ostream &output, const Sales_data &sd){
    output<<sd.bookNo<<" "<<sd.units_sold<<" "<<sd.price<<" "<<sd.revenue<<" "<<sd.avg_price()<<endl;
    return output;
}

istream &operator>>(istream &input, Sales_data &sd){
    input>>sd.bookNo>>sd.units_sold>>sd.price;
    sd.revenue = sd.price * sd.units_sold;
    return input;
}

template <typename T>
int compare(const T &a, const T &b){
    return a >= b ? a == b ? 0 : 1 : -1;
}

int main(){
    Sales_data book1("0-101-12335-X", 2, 10.0);
    Sales_data book2("1-103-23344-Y", 3, 15.0);
    cout<<compare(book1, book2)<<endl;

    return 0;
    
}
运行结果显示如下

在这里插入图片描述

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Navigator_Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值