C++ //练习 7.41 使用委托构造函数重新编写你的Sales_data类,给每个构造函数体添加一条语句,令其一旦执行就打印一条消息。用各种可能的方式分别创建Sales_data对象,认真研究

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

练习 7.41 使用委托构造函数重新编写你的Sales_data类,给每个构造函数体添加一条语句,令其一旦执行就打印一条消息。用各种可能的方式分别创建Sales_data对象,认真研究每次输出的信息直到你确实理解了委托构造函数的顺序。

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

 

代码块
/*************************************************************************
	> File Name: ex7.41.cpp
	> Author: 
	> Mail: 
	> Created Time: Thu 22 Feb 2024 12:26:50 PM 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) {
   cout<<"Three Parameters"<<endl;}
    Sales_data(): Sales_data("", 0, 0) {
    cout<<"Default Parameters"<<endl; }
    Sales_data(string s): Sales_data(s, 0, 0) {
    cout<<"Accept string Parameter"<<endl; }
    Sales_data(istream &);
    
    friend ostream &print(ostream&, const Sales_data&);
    friend istream &read(istream&, 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;
};

Sales_data::Sales_data(istream &in){
   
    read(in, *this);
}

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;
    return *this;
}

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

Sales_data add(const Sales_data &sd1, const Sales_data &sd2){
   
    Sales_data t = sd1;
    t.combine(sd2);
    return t;
}

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

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

int main(){
   
    Sales_data book1("0-201-78345-X", 1, 20.00);
    Sales_data book2;
    Sales_data book3("0-301-76459-Y");

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

在这里插入图片描述

最近更新

  1. TCP协议是安全的吗?

    2024-02-23 08:52:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-23 08:52:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-23 08:52:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-23 08:52:01       20 阅读

热门阅读

  1. haproxy集成国密ssl功能

    2024-02-23 08:52:01       34 阅读
  2. vivado RAM Inference

    2024-02-23 08:52:01       27 阅读
  3. nifi连接Sql server数据库报错TLS问题

    2024-02-23 08:52:01       37 阅读
  4. C++程序设计学习笔记(二)

    2024-02-23 08:52:01       28 阅读
  5. Go 语言一些常用语法编写和优化指南

    2024-02-23 08:52:01       30 阅读
  6. 力扣(leetcode)第455题分发饼干(Python)

    2024-02-23 08:52:01       31 阅读