基類和派生類

基類

定義

class Quote
{
public:
    Quote() = default;
    Quote(const std::string &book, double sales_price):
    bookNo(book), price(sales_price){ }
    std::string isbn(){
        return bookNo;
    }
    virtual double net_price(std::size_t n) const {
        return n * price;
    }

    virtual ~Quote() = default;


private:
    std::string bookNo;  //爲啥設爲private?子類不就沒了嗎?
protected:
    double price = 0.0;
};

什麼定義爲虛函數

如果想由子類直接繼承不改變,就定義爲普通函數;

如果想由子類更改,就定義爲虛函數。

虛函數特徵

1.通過指針或引用調用虛函數時,根據所指對象的類型選擇。而普通函數直接看形參了。

2.普通函數是編譯時解析;而虛函數是運行時綁定。

訪問控制與繼承

bookNo其實子類還有,就是無權直接訪問,但是能通過isbn()訪問。


派生類

定義

class Bulk_quote : public Quote
{
public:
    Bulk_quote() = default;
    Bulk_quote(const std::string &, double, std::size_t, double);
    double net_price(std::size_t) const override;
private:
    std::size_t min_qty = 0;
    double discount = 0.0; 
};

虛函數特徵

1.可以把派生類對象綁定到基類指針或引用上。

2.可以在前置寫virtual,也可以不寫。也可以註明override關鍵字

派生類對象組成

1.自己定義的成員的子對象

2.基類成員的子對象。

構造函數

基類部分的成員由基類初始化,不能幫着初始化。

Bulk_quote(const std::string &book, double p, std::size_t qty, double disc):Quote(book, p), min_qty(qty), discount(disc)
{
        
}

派生類聲明

class Bulk_quote: public Quote;   //xxx
class Bulk_quote;

被用作基類的類

不能只聲明,還要定義,因爲需要明白基類成員分佈。

class Quote{};   //要寫定義
class Bulk_quote: public Quote {};

final禁止繼承

新標準定了一種方式

class noDerived final{};   
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章