继承(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
更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/cplus/
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索const
, double
, 构造器
, std
, 绑定C++类
Inheritance
dynamic binding、继承者们简介、继承者们剧情简介、太原杨继承简介、继承者们每集简介,以便于您获取更多的相关知识。