C++中的担任(inheritance) 和动态绑定(dynamic binding) 简介
担任(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