14.50
初始化正确,正确匹配当前没有二义性
14.51
dval先隐式转换到LongDouble
再调用calc(LongDouble)
14.52
ld = si+ldsi是SmallInt类型, si+ld将调用SmallInt的成员加法运算符,ld将返回一个int转换成SmallInt进行运算,在计算完成之后,将返回一个SmallInit,在将隐式转换从Int转换成Double,赋值给ld,再隐式转换成LongDouble
ld = ld + si是将调用LongDouble的成员加号运算符,并且是准确匹配,返回的LongDouble将通过默认拷贝赋值函数传递给ld
14.53
不合法,存在二义性,可以将s1转换成int和3.14进行计算,也可以将3.14转换成int来初始化一个SmallInt来使用成员加法运算符,
将其中一个修改即可
15.1
在C++语言中,基类将类型相关的函数与派生类不做改变直接继承的函数区分对待,对于某些函数,基类希望它的派生类各自定义是和自身的半吧呢,此时基类就将这些函数声明成虚函数
15.2
protected:某些成员变量,基类希望它的派生类有权访问该成员,同时禁止其他用户访问
private:类私有变量,任何用户都无权访问
15.3
class Quote {
public:
Quote() = default;
Quote(const string& book, double sales_price):bookNo(book),price(sales_price){}
string isbn() const{return bookNo;}
virtual double net_price(size_t n) const {return n * price;}
virtual ~Quote() = default;
private:
std::string bookNo;
protected:
double price =0.0;
};
double print_total(ostream& os, const Quote & item, size_t n){
double ret = item.net_price(n);
os << "ISBN: " << item.isbn() << "#sold:" << n << "total due"<<ret << endl;
return ret;
}