• 练习7.36、7.37、7.39、7.40


    7.36:下面的初始值是错误的,请找出问题所在并尝试修改它。

    struct X {

      X(int i ,int j):base(i),rem(base%j)  {   }

      int rem,base;

    };

    Ans:由于构造函数的初始化顺序与成员定义的顺序一直,所以该程序是rem先初始化,然后才是base,但是初始值列表中rem却使用未初始化的base参与其初始化,所以编译会报错。

    修改之后:

    struct X {

      X(int i ,int j):base(i),rem(base%j)  {   }

      int base,rem;

    };

    7.37:使用本节提供的Sales_data类,确定初始化下面的变量时分别使用了哪个构造函数,然后罗列出每个对象所有的数据成员的值。

    Sales_data first_item(cin);

    int main()  {

      Sales_data next;

      Sales_data last("9-999-99999-9");

    }

    Ans:main函数的第一条语句使用了,默认构造函数,这个对象的数据成员除了bookNo的初始值是空串,其他的都是类内初始值0。

        第二条语句使用了接受const &Sales_data的构造函数,这个对象的数据成员除了bookNo的值是"9-999-99999-9",其他的都是类内初始值。

       Sales_data first_item(cin);调用了Sales_data(std::istream &is) { read(is,*this); },其对象成员值依赖于用户输入。

    Ps:根据实参不同,调用最佳匹配的构造函数。

    7.39:如果接受string的构造函数和接受istream&的构造函数都使用默认实参,这种行为合法吗?如果不,为什么?

    Ans:不合法。由于两者函数都使用了默认实参,也就意味着两者都具有了默认构造函数的作用,一旦使用不带参数的对象时,会出现调用的二义性。

    7.40:从下面的抽象概念中选择一个(或者你自己指定一个),思考这样的类需要哪些数据成员,提供一组合理的构造函数并阐明这样做的额原因。

    (a)book  (b)Date  (c) Employee

    (d)Vehicle (e)Object  (f)Tree

    Ans:可以选择book,一本书需要书名,ISBN号,出版社名,作者名,价格等信息作为数据成员,其中除了价格外其他的都是string类类型的,价格使用double类型的。

    class Book {
    public:
           Book(const string& bn,const string& no,const string &pb,const string &at,double pc):b_Name(bn),bookNo(no),Publisher(pb),Author(at),price(pc) 
           { } 
    private:
        
            string b_Name;
            string bookNo;
            string Publisher;
            string Author;
            double price=0.0;
    };
  • 相关阅读:
    02 日志系统: 一条SQL 更新语句是如何执行的
    MySql 实战45讲笔记 : 01
    爬取boss直聘全国招聘数据并做可视化
    爬取豆瓣电影-长津湖短评
    尝试破解压缩文件
    将webp格式的图像批量转化成jpg
    将JPG格式图片转换成PNG格式
    几个学习编程的游戏网站
    检测网址连接有效性
    监控设备电池电量并发送通知
  • 原文地址:https://www.cnblogs.com/Dark-King/p/9513236.html
Copyright © 2020-2023  润新知