程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++中的繼承(inheritance) 和動態綁定(dynamic binding) 簡介

C++中的繼承(inheritance) 和動態綁定(dynamic binding) 簡介

編輯:關於C++

繼承(inheritance)和動態綁定(dynamic binding) 是面向對象的重要組成部分, 即繼承(inheritance)和多態(polymorphism),

可以使 派生類(derived class)擁有 基類(base class) 的接口(interface);

派生類可以覆寫(override)基類的虛函數(virtual function), 符合特定的功能;

派生類可以隱式地轉換為基類 (derived-to-base conversion), 但不可逆, 因為派生類的對象包含自己的部分 和 基類的對象的部分;

盡量使用基類的構造器, 去構造基類的對象, 可以易於管理; 對於靜態成員,只定義(define)一次, 忽略其他定義;

可以顯示定義類無法被繼承, 在類後添加 "final" 限定詞;

代碼:

/* 
 * CppPrimer.cpp 
 * 
 *  Created on: 2013.11.12 
 *      Author: Caroline 
 */
      
/*eclipse cdt*/
      
#include <iostream>  
#include <string>  
#include <cstddef>  
      
using namespace std;  
      
class Quote {  
public:  
    Quote() = default;  
    Quote (const std::string& book, double sales_price) :  
        bookNo (book), price (sales_price) {}  
    std::string isbn() const { return bookNo; }  
    virtual double net_price (std::size_t n) const { return n* price; } //虛函數  
    virtual ~Quote() = default; //動態綁定析構器  
private:  
    std::string bookNo;  
protected: //受保護類型  
    double price = 0.0;  
};  
      
class Bulk_quote final : public Quote { //final限定詞, 無法被繼承  
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) {} //使用基類的構造器  
    double net_price(std::size_t cnt) const override;  
private:  
    std::size_t min_qty = 0; //折扣的最小量  
    double discount = 0.0; //折扣  
};  
double Bulk_quote::net_price(std::size_t cnt) const
{  
    if (cnt >= min_qty)  
        return cnt * (1-discount) * price;  
    else
        return cnt * price;  
}  
int main (void) {  
      
    Quote q("CppPrimer", 99);  
    Bulk_quote bq("CppPrimer", 99, 10, 0.5);  
    std::size_t n = 20;  
    std::cout << "We want to buy " << n << " books. " << std::endl;  
    std::cout << "Quote net_price : " << q.net_price(n) << std::endl;  
    std::cout << "Bulk_quote net_price : " << bq.net_price(n) << std::endl;  
      
    return 0;  
      
}

作者:csdn博客 Spike_King

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved