笔记:C++学习之旅---面向对象程序设计2
来源:互联网 发布:紫金银交易软件 编辑:程序博客网 时间:2024/06/05 16:46
笔记:C++学习之旅---面向对象程序设计2
面向对象程序设计基于三个基本概念:数据抽象、继承和动态绑定。
继承和动态绑定对程序的编写有两方面的影响:一是我们可以更容易的定义与其他类相似但不完全相同的新类:二是在使用这些彼此相似的类编写程序时,我们可以在一定程度上忽略掉它们的区别。
继承
通过继承联系在一起的类构成一种层次关系。通常在层次关系的根部有一个基类,其他类型则直接或间接的从基类继承而来,这些继承得到的类称为派生类。
在C++语言中,基类将类型相关的函数与派生类不做改变直接继承的函数区分对待。对于某些函数,基类希望它的派生类各自定义适合自身的版本,此时 基类将这些函数声明成虚函数。
派生类必须通过使用类派生列表明确指出它是从哪个基类继承而来。
动态绑定
在C++语言中,当我们使用基类的引用(或指针)调用一个虚函数时将发生动态绑定。
定义派生类
派生类可以在他覆盖的函数前使用virtual关键字。C++11新标准中允许派生类显示的注明他使用某个成员函数覆盖了它的继承的虚函数。具体做法是在形参列表后面、或者在const成员函数的const关键字后面、或者在引用成员函数的引用限定符后面添加一个关键字override。
派生类使用基类的成员
派生类可以访问基类的公有成员和受保护成员。
防止继承的发生
练习15.7:
定义一个类使其实现一种数量受限的折扣策略,具体策略是:当购买书籍的数量不超过一个给定的限量时享受折扣,如果购买量一旦超过了限量,则超出的部分将以原价销售。
#include<iostream>
#include<string>
usingnamespacestd;
classQuote
{
public:
Quote() =default;
Quote(conststring&b,doublep) :bookNo(b), price(p){}
stringisbn()const{returnbookNo; }
virtualdoublenet_price(size_tn)const{returnn*price; }
virtual~Quote() =default;
private:
stringbookNo;
protected:
doubleprice = 0.0;
};
classBulk_Quote:publicQuote
{
public:
Bulk_Quote() =default;
Bulk_Quote(conststring&b,doublep,size_tq,doubledisc) :
Quote(b,p), min_qty(q), discount(disc){ }
doublenet_price(size_tn)constoverride;
private:
size_tmin_qty = 0;
doublediscount = 0.0;
};
doubleBulk_Quote::net_price(size_tn)const
{
returnn*price*(n>= min_qty ? 1 - discount : 1);
}
doubleprint_total(ostream&os,constQuote&item,size_tn)
{
doubleret =item.net_price(n);
os<<"ISBN:"<<item.isbn()
<<" #sold:"<<n<<" total due:"<< ret << endl;
returnret;
}
intmain()
{
Quoteq("textbook", 10.60);
Bulk_Quotebq("textbook", 10.60, 10, 0.3);
print_total(cout, q, 12);
print_total(cout, bq, 12);
return0;
}
0 0
- 《面向对象程序设计-C++》学习笔记2
- 笔记:C++学习之旅---面向对象程序设计2
- 《面向对象程序设计-C++》学习笔记1
- C++primer学习笔记----面向对象程序设计(2)
- 面向对象的程序设计学习笔记-2
- C++primer学习笔记----面向对象程序设计(1)
- javaSE学习笔记之面向对象程序设计(一)
- javaSE学习笔记之面向对象程序设计(二)
- JavaScript高程学习笔记之面向对象的程序设计(6)
- C++primer阅读笔记---------------面向对象程序设计
- 【从C到C++学习笔记】程序/结构化程序设计/面向对象的程序设计
- C++primer学习:面向对象程序设计(2):抽象基类
- C++学习笔记 面向对象程序设计
- js学习笔记-面向对象程序设计
- 【学习笔记】面向对象的程序设计
- JavaScript高级程序设计笔记之面向对象
- 《C++面向对象程序设计》学习之前言
- C 面向对象程序设计
- 笔记:C++学习之旅---关联容器
- 微信公众号开发_QRCodeUtils的代码(七)
- 工作记录之JS加载XML文件的方式
- 个推的推送消息延迟的一个原因记录
- 更新Ubuntu的gcc和g++版本
- 笔记:C++学习之旅---面向对象程序设计2
- Python字符串的encode与decode研究心得乱码问题解决方法
- androidManifest
- 微信公众号开发_ReceiveXmlEntity的代码(八)
- 怎么在迷茫中走出
- HTTP简介,http是一个属于应用层的面向对象的协议
- hive中order by、distribute by、sort by和cluster by的区别和联系
- NOIP 2013 火柴排队
- CSS中星号(*)影响的样式继承性问题