《C++ Primer》5th 课后练习 第七章 类 51~58

练习7.51 vector 将其单参数的构造函数定义成 explicit 的,而string则不是,你觉得原因何在?

因为vector的单参数构造函数指定的是vector的期望大小,相当于构造了一个指定长度的空vector,这显然不合常理的。而string的单参数构造函数则是指定的string的内容,可以在局部构造出一个string类型的临时变量,这符合调用者的初衷,也可以提高编写程序的效率

练习7.52 使用2.6.1节的 Sales_data 类,解释下面的初始化过程。如果存在问题,尝试修改它。

Sales_data item = {"987-0590353403", 25, 15.99};

Sales_date不是聚合类,不能以这种形式赋值,应该使用它的构造函数。

Sales_data item("987-0590353403", 25, 15.99/25);

练习7.53 定义你自己的 Debug

class Debug {
public:
    constexpr Debug(bool b = true) : hw(b), io(b), other(b) { }
    constexpr Debug(bool h, bool i, bool o) : hw(r), io(i), other(0) { }

    constexpr bool any() { return hw || io || other; }
    void set_hw(bool b) { hw = b; }
    void set_io(bool b) { io = b; }
    void set_other(bool b) { other = b; }
    
private:
    bool hw;        // runtime error
    bool io;        // I/O error
    bool other;     // the others
};

练习7.54 Debug中以 set_ 开头的成员应该被声明成 constexpr 吗?如果不,为什么?

不应该,因为他们需要设置错误的值,不可能有且只有一条返回语句。

练习7.55 7.5.5节的 Data 类是字面值常量类吗?请解释原因。

不是,因为Data没有一个constexpr的构造函数,而且std::string不是字面值类下。

练习7.56 什么是类的静态成员?它有何优点?静态成员与普通成员有何区别?

是一些与类有关的变量和函数,而他们又不属于每一个实例化的对象,并且他们被所有类对象共享。它们可以在没有该类实际对象的情况下使用。而且可以类中静态对象的类型可以是类本身,也可以作为类中的默认参数。

练习7.57 编写你自己的 Account 类。

#pragma once
#include<string>
class Account{
	void calculat() { amount += amount * interestRate; }
	static double rate() { return interestRate; }
	static void rate(double r) { interestRate = r; }
private:
	std::string owner;
	double amount;
	static double interestRate;
};

练习7.58 下面的静态数据成员的声明和定义有错误吗?请解释原因。

//example.h
class Example {
public:
	static double rate = 6.5;
	static const int vecSize = 20;
	static vector<double> vec;
};
//example.c
#include "example.h"
double Example::rate;
vector<double> Example::vec;

rate如果在类内初始化的必须是字面值常量类型。

//example.h
class Example {
public:
	static constexpr double rate = 6.5;
	static const int vecSize = 20;
	static vector<double> vec(vecSize);
};
//example.c
#include "example.h"
double Example::rate;
vector<double> Example::vec(Example::vecSize);
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值