第 15章 面向对象程序设计

15.1 概述

面向对象程序设计的核心思想是数据抽象、继承、和动态绑定。通过使用数据抽象,我们可以将类的接口与实现分离;使用继承,可以定义相似类型并对其相似关系建模;使用动态绑定,可以在一定程度上忽略相似类型的区别,而以同一的方式使用它们的对象

继承
通过继承联系在一起的类构成了一种层次关系,通常在层次关系的根部有一个基类,其他类则直接或者间接从基类继承而来,这些继承得到的类称为派生类

基类是共有的部分,派生类是不同类特有的

基类将类型相关的函数与派生类不做改变直接继承的函数区分对待,对于某些函数,基类希望派生类各自定义适合自己的版本,此时基类就将这些函数声明成虚函数

函数加上virtual就是虚函数,可以重新在派生类重新定义
class Quote{
public:
  string isbn() const;//常量成员函数
  virtual double net_price(szie_t n) const;//虚函数


}

派生类必须通过使用类派生列表明确指出它是从哪个(哪些)基类继承而来。类派生列表访问形式:

class Bulk_Quote :public Quote ;//基类是	Quote
{}

动态绑定
使用动态绑定,我们可以用同一段代码处理Quote和Bulk_quote派生类的对象调用它,

double print_total(ostream &os,const Quote &item,size_t n)
double ret = item.net_price(n);
    os << "ISBN:" << item.isbn()  //调用Quote::isbn()
       << "# sold: " << n << "total due:" << ret <<endl;
    return ret;
} 

我们既能使用基类Quote的对象调用该函数,也能使用Bulk_quote派生类的对象调用它,又因为print_total是使用引用类型调用net_price函数,实际传入的对象类型将决定执行哪个版本的函数。

print_total(cout, basic, 20); //调用Quote::net_price      
print_total(cout, bulk, 20);  //调用Bulk_quote::net_price

15.2 定义基类和派生类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值