15.1
某些函數(shù)我們希望它能與基類有不同的表現(xiàn)形式闺鲸,就用virtual修飾成虛函數(shù)
15.2
private 基類和友元類可以訪問
protect 基類和它的派生類都可以訪問们拙,但是其他的類不能訪問督勺,
兩個最顯著的區(qū)別就是支不支持派生類訪問
15.3
class Quote{
public:
Quote() = default;
Quote(const std::string &book,double sales_price):bookNo(book),price(sales_price){}
std::string isbn() const {return bookNo;}
//返回給定數(shù)量的書籍的銷售總額
//派生類負(fù)責(zé)改寫并使用不同的折扣計算方法
virtual double net_price(std::size_t n) const{ return n*price;}
virtual ~Quote() = default; //對析構(gòu)函數(shù)進(jìn)行動態(tài)綁定
private:
std::string bookNo;
protected:
double price = 0.0;
};
15.4
(a) 榴都,不正確契吉,不能某個類既是基類又是派生了你
(b), 不正確,違反了繼承的本質(zhì)屑迂,無法從私有的類中繼承
(c)浸策,不正確,派生類的聲明與普通類一樣
15.5
class Bulk_quote : public Quote{
public:
Bulk_quote() = default ;
Bulk_quote(const std::string & book,double p , std::size_t qty,double disc):Quote(book,p),min_qty(qty),discount(disc){}
//覆蓋基類的函數(shù)版本以實現(xiàn)基于大量購買的折扣策略
double net_price(std::size_t n) const override;
private:
std::size_t min_qty = 0; //適用折扣政策的最低購買量
double discount = 0.0; //以小數(shù)表示的折扣
};
double Bulk_quote::net_price(std::size_t cnt) const {
if(cnt >= min_qty)
return cnt*(1-discount) * price;
else{
return cnt * price;
}
}
15.6
//一個Quote 編號為li惹盼,單價為20
Quote q("li", 20.00);
//一個Bulk_quote庸汗,編號為li 單價20 最小折扣數(shù)量10 折扣20%
Bulk_quote bq("li", 20.00, 10, 0.2);
//計算相應(yīng)數(shù)量的商品
print_total(std::cout, q, 15);
print_total(std::cout, bq, 15);
15.7
類中的方法
//新購物打折策略
double Bulk_quote::new_price(std::size_t cnt,std::size_t use_count) const {
if(cnt<=use_count){ //折扣數(shù)目內(nèi)
return cnt*price*(1-discount);
}else{ //折扣數(shù)目外
return use_count*price*(1-discount)+(cnt-use_count)*price;
}
}
測試用例
//一個Bulk_quote,編號為li 單價20 最小折扣數(shù)量10 折扣20%
Bulk_quote bq("li", 20.00, 10, 0.2);
std::cout<<bq.new_price(22,10)<<std::endl;;
15.8
靜態(tài)類型在編譯時候就已經(jīng)編譯好
動態(tài)類型需要在運(yùn)行時根據(jù)傳入的實參進(jìn)行判斷
15.9
1手报,父類指針指向子類引用
2蚯舱,父類引用指向子類對象
總之,基類的指針或者引用會使靜態(tài)類型與動態(tài)類型分離
15.10
書上原話:ifstream 和 istringstream都繼承于istream掩蛤,而read函數(shù)同時也被繼承枉昏,所以可以放心使用