C++Primer第五版 7.5.2节练习

本文通过两个练习探讨了委托构造函数的应用。首先,通过修改Sales_data类来展示如何使用委托构造函数,并观察不同构造路径的执行顺序。其次,设计了一个Employee类,演示了如何通过委托构造函数简化代码。

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

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

练习7.42:对于在练习7.40(参见7.5.1节,第261页)中编写的类,确定哪些构造函数可以使用委托,如果可以的话,编写委托构造函数。如果不可以,从抽象概念列表中重新选择一个你认为可以使用委托构造函数的,为挑选出的这个概念编写类定义。
答: 见云盘程序 练习7.42.cpp

练习7.41

/*
*练习7.41
*日期:2015/7/17 
*问题描述:使用委托构造函数重新编写你的Sales_data类,给每个构造函数体添加一条语句,令其一旦执行就打印一条信息。用各种方式分别创建Sales_data对象,认真研究每次输出的信息直到你确实理解了委托构造函数的执行顺序
*功能:理解委托构造函数的执行顺序
*说明:在练习7.21的基础上进行改动
*作者:Nick Feng
*邮箱:邮箱:nickgreen23@163.com  
*/ 

/*
*练习7.21
*日期:2015/7/6 
*问题描述:练习7.21:修改你的Sales_data类使其隐藏实现的细节。你之前编写的关于Sales_data操作的程序应该继续使用,借助类的新定义重新编译该程序,确保其工作正常。
*功能;使用访问说明符 
*作者:Nick Feng 
*邮箱:nickgreen23@163.com 
*/

#include <iostream>
#include <string>

using namespace std;

class Sales_data{
public:
    friend istream &read(istream &, Sales_data &);//一个友元函数read,便于Sales_data类直接访问 
    friend ostream &print(ostream &os, const Sales_data &item);
    //Sales_data() = default;//默认构造函数 
    //Sales_data(const std::string &s) : bookNo(s){ }
    Sales_data(const std::string &s, unsigned n, double p) : bookNo(s), units_sold(n), revenue(p*n){ cout << "I am Sales_data(const std::string &s, unsigned n, double p)" <<endl; }
    Sales_data(std::istream &is){
        read(is,*this);
        cout << "I am Sales_data(std::istream &is)!" << endl;
    }

    Sales_data() : Sales_data("",0,0) {cout << "I am Sales_data()" << endl;}
    Sales_data(std::string s) : Sales_data(s,0,0) { cout << "I am Sales_data(std::string s)" << endl;}


    string isbn() const {return bookNo;}
    Sales_data& combine(const Sales_data&);
    double avg_price() const;

private:
    string bookNo;
    unsigned units_sold = 0;
    double revenue = 0.0;
};

Sales_data add(const Sales_data&, const Sales_data&);
std::ostream &print(std::ostream&, const Sales_data&);
std::istream &read(std::istream&, Sales_data&);

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

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

istream &read(istream &is, Sales_data &item)
{
    double price = 0;
    is >> item.bookNo >> item.units_sold >> price;
    item.revenue = price * item.units_sold;
    return is; 
}

ostream &print(ostream &os, const Sales_data &item){
    os << item.isbn() << " " << item.units_sold << " "
       << item.revenue << " " << item.avg_price();
    return os;
}

Sales_data add(const Sales_data &lhs, const Sales_data &rhs){
    Sales_data sum = lhs;
    sum.combine(rhs);
    return sum;
}

/* 
Sales_data::Sales_data(std::istream &is)
{
    read(is,*this);
}
*/

int main()
{
    Sales_data s;
    cout << endl; 

    Sales_data s1("Hero!I am");//调用第一种构造函数 
//  print(cout, s1);
    cout << endl;

    Sales_data s2("Hero!I am",10,20);//调用第二种构造函数 
    //print(cout,s2);
    cout << endl;

    Sales_data s3(cin);//调用第三种构造函数 
    //print(cout,s3);
    //cout << endl;
    return 0;
}

练习7.42

/*
*练习7.42 
*问题描述:练习7.42:对于你在练习7.40(参见7.5.1节,第261页中编写的类,确定哪些构造函数可以使用委托。如果可以的话,编写构造函数。如果不可以,从抽象概念列表中重新选择一个你认为可以使用委托构造函数的,为挑选出的这个概念编写类定义 
*说明:理解委托构造函数的概念 
*作者:Nick Feng 
*邮箱:NickGreen23@163.com 
*/

#include <iostream>
#include <string> 

using namespace std;

class Employee{
public:
    friend ostream& print(ostream &,Employee&); 
    Employee(string na, char se,int ag, string com_ID, string com_Name) : name(na), sex(se),age(ag),company_ID(com_ID),company_Name(com_Name) {}
    Employee() : Employee("None",'F',0,"UNKNOW","UNKNOW") { }
    Employee(string na, char se, int ag) : Employee(na,se,ag,"UNKNOW","UNKNOW") {}

private:
    string name;
    char sex;
    int age;
    string company_ID;
    string company_Name;
};

ostream& print(ostream &os, Employee &item)
    {
        os << item.name << "\n" << item.sex << "\n" << item.age << "\n" << item.company_Name << "\n" << item.company_ID << "\n";    
    }

int main()
{
    Employee em1("Nick",'F',26,"9527","GDSK");
    print(cout,em1);
    cout << endl;

    Employee em2;
    print(cout,em2);
    cout << endl;

    Employee em3("Tom",'F',27);
    print(cout,em3);
    cout << endl;

    return 0;
}
资源下载链接为: https://pan.quark.cn/s/d9ef5828b597 四路20秒声光显示计分抢答器Multisim14仿真源文件+设计文档资料摘要 数字抢答器由主体电路与扩展电路组成。优先编码电路、锁存器、译码电路将参赛队的输入信号在显示器上输出;用控制电路和主持人开关启动报警电路,以上两部分组成主体电路。通过定时电路和译码电路将秒脉冲产生的信号在显示器上输出实现计时功能,构成扩展电路。经过布线、焊接、调试等工作后数字抢答器成形。关键字:开关阵列电路;触发锁存电路;解锁电路;编码电路;显示电路 一、设计目的 本设计是利用已学过的数电知识,设计的4人抢答器。(1)重温自己已学过的数电知识;(2)掌握数字集成电路的设计方法和原理;(3)通过完成该设计任务掌握实际问题的逻辑分析,学会对实际问题进行逻辑状态分配、化简;(4)掌握数字电路各部分电路与总体电路的设计、调试、模拟仿真方法。 二、整体设计 (一)设计任务与要求: 抢答器同时供4名选手或4个代表队比赛,分别用4个按钮S0 ~ S3表示。 设置一个系统清除和抢答控制开关S,该开关由主持人控制。 抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,并在LED数码管上显示,同时扬声器发出报警声响提示。选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。 参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。 如果定时时间已到,无人抢答,本次抢答无效。 (二)设计原理与参考电路 抢答器的组成框图如下图所示。它主要由开关阵列电路、触发锁存电路、解锁电路、编码电路和显示电路等几部分组成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值