C++:简单的继承理解
2016-08-09 15:43
246 查看
#ifndef _QUOTE__ #define _QUOTE__ #include <string> //定义基类 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 :public Quote{ public: Bulk_quote() = default; Bulk_quote(const std::string &book, double sales_price, std::size_t n, double discnt) :Quote(book, sales_price), min_qty(n), discount(discnt){} //覆盖基类的函数版本以实现基于大量购买的折扣政策 double net_price(std::size_t n) const override; private: std::size_t min_qty = 0; //适用折扣政策的最低购买量 double discount = 0.0; //以小数表示的折扣额 }; inline double Bulk_quote::net_price(std::size_t n)const { if (n > min_qty) { return n*price*discount; } else return n*price; } double print_total(std::ostream &, const Quote &, std::size_t); #endif double print_total(std::ostream &os, const Quote &item, std::size_t n) //调用时进行动态绑定 { //根据传入item形参的对象的类型调用Quote::net_price()或者Bulk_quote::net_price double ret = item.net_price(n); os << "#ISBN: " << item.isbn() << " #sold: " << n << " #total due: " << ret << std::endl; return ret; } Quote item("123", 4); Bulk_quote item1("123", 5, 3, 0.9); print_total(cout, item, 10); print_total(cout, item1, 10); print_total(cout, item, 10);
由第3个输出:
派生类对象包含:基类部分的数据成员(bookNo = 123,price = 5),自己的数据成员部分(min_pty = 3,discount = 0.9);
基类对象:(bookNo = 123,price = 4)
Bulk_quote item1(“123”, 5, 3, 0.9)只是初始化了自己的基类部分的数据成员部分和自己的数据成员部分
继承理解:简化了代码编写,拥有基类的数据成员部分,并给其赋值。
相关文章推荐
- C++中虚函数的理解,以及简单继承情况下的虚函数的表!
- 有关C++虚拟继承的简单理解
- 简单理解C++的多态公有继承及虚函数
- c++多重继承和虚继承及虚函数深入理解(转)
- C/C++编译过程简单理解
- C++多态、继承的简单分析
- 类、对象、接口、继承等概念的理解的简单表述..
- C++中虚基类与抽象类的简单理解。
- 关于封装,继承,多态三个概念的简单理解
- C++中的简单继承
- 第十二周C++【任务1】理解基类中成员的访问限定符和派生类的继承方式
- 一个简单的例子理解C++ map, 运用map统计单词出现的次数
- 简单的理解 类的继承 和 多态性
- 从 C++ 到 Objective-C-------简单继承
- C# 泛型的简单理解(安全、集合、方法、约束、继承)分享
- C#不存在私有继承和保护继承,只有公有继承,这点和C++相比还是简单了很多
- in c++读后感--理解继承和组合
- 我对C++中继承的理解
- 《C++第十二周实验报告1-1》----理解基类中成员的访问限定符和派生类的继承方式
- C++第十三周任务-项目一(理解基类中成员的访问限定符和派生类的继承方式)