定義基類
//基類通常都應該定義乙個虛析構函式,即使該函式不執行任何實際操作也是如此。
//基類必須將它的兩種成員函式區分開來,
//一種是基類希望其派生類進行覆蓋的函式,既虛函式,使用virtual關鍵字
//一種是基類希望派生類直接繼承而不要改變的函式
class quote
virtual double net_price(int n) const
virtual ~quote() = default;//對析構函式動態繫結
private:
string bookno;
protected:
double price = 0.0;
};定義派生類
//派生類必須通過使用類派生列表明確指出它是從那個(那些)基類繼承而來。
//類派生列表是冒號後邊以逗號隔開的基類列表,可以在每個基類前加訪問說明符。
//派生類必須將繼承而來的需要覆蓋的函式重新宣告。
//乙個派生類物件包含多個組成部分,乙個是派生類自己定義的成員,和繼承來的基類的成員。
//如果派生類沒有覆蓋其基類中的某個虛函式,則該虛函式的行為類似於其他普通成員,派生類會直接繼承其在基類中的版本。
//派生類也必須使用基類的建構函式來初始化它的基類部分。
class bulk_quote : public quote
;//每個類控制自己的成員初始化過程
//首先初始化基類的成員部分,然後按照宣告的順序依次初始化派生類的成員
bulk_quote::bulk_quote(const string& book, double p, int qty, double disc) :
quote(book, p), min_qty(qty), discount(disc) {}
//派生類可以訪問基類的共有成員和受保護成員
double bulk_quote::net_price(int n) const
bulk_quote::~bulk_quote()
{}void showprice(const quote& quote)
int main()
//base不能作為基類,應為它不能被繼承,成員函式和成員變數都可以用final來修飾。
型別轉換與繼承
//在使用繼承關係時要區分表示式的靜態型別和動態型別。靜態在編譯時總是已知的,動態型別在執行時才可知。
//不存在從基類向派生類的隱式型別轉換
//物件之間不存在型別轉換,派生類向基類的自動型別轉換只對指標或引用有效。
//當我們用過乙個派生類物件為乙個基類物件初始化或賦值時,只有該派生類物件中的基類部分會被拷貝、移動或賦值,派生類的其他部分將被忽略掉。
//派生來向基類的型別轉換也可能會由於訪問受限而不成功。
bulk_quote bbulk;//派生類物件
quote iitem(bbulk);//使用的是派生類中的基類部分初始化的quote建構函式
iitem = bbulk;//呼叫的是quote::operator=(const quote&)
return 0;
}
C OOP物件導向
oop 物件導向,全程叫object oriented programming 物件導向的三大特性 1 封裝2 繼承3 多型類的定義 實際上就是具有相同屬性和特徵的一類事物的抽象集合 類和物件的關係 類是物件的抽象,物件是類的例項.物件的定義 抽象類的例項.小例子昨天,我去了工商銀行去辦銀行卡 在我...
11 c oop思想物件導向程式設計(by 朝夕)
物件導向特點 設計模式 原則 設計模式六大原則 類與介面的區別 類是為了說明是什麼。介面是為了限定做什麼。pop procedure oriented programming 面向過程程式設計 oop object oriented programming 物件導向程式設計 繼承 封裝,多型 封裝 ...
c oop 類和物件
物件導向 簡單的說就是寫很多類 每個類有自己的資料和函式,叫做 成員 類定義出來的變數,也稱為類的例項,就是 物件 和struct 好像差不多 物件之間有 關係,其他的需要定義 private 私有成員,只能在成員函式內訪問 public 公有成員,可以在任何地方訪問 protected 保護成員,...