C++面向对象程序设计

前言

面向对象有三个核心概念,抽象、继承、多态。

数据抽象就是多类事物的共同特征抽象出来,抽象出一个类,这个类定义了接口。

继承是描述类与类之间的关系,是一种包含关系。比如苹果和梨子都是水果,水果是基类,它包含苹果和梨子的共同特征(数据特征、行为特征),而苹果和梨是派生类,有它们自己独有的特征。

多态,c++主要指的是动态绑定,根据里氏替换原则,使用父类的地方都可以用子类去替换。在运行时,根据实际类型(c++称为动态类型)来调用实际类型的方法,已达到复用的目的。

我们在之前 的那一章已经分析过数据抽象的基本知识了。本文主要分析继承和动态绑定(更加严格来说)。

继承和动态绑定对程序有两方面的影响:

  1. 更容易的定义与其他类相似但不完全相同的新类 (继承)
  2. 在一定程度上忽略这些彼此相似的类编写程序(动态绑定)
// 继承
class Quote {
public:
    std::string isbn() const;

    // 希望派生类定义自己的版本
    virtual double net_price(int n) const;  
};

class Bulk_quote : public Quote {
public:
    // 1. virtual 可加可不加;2.override显示的告诉编译器这个方法重写了基类的虚函数
    virtual double net_price(int n) const override; 
};

// 动态绑定
double print_total(ostream &os, const Quote &item, int n) {
    // 使用基类引用编程,运行时根据引用的动态类型选择实际类型的虚函数
    double ret = item.net_price(n);
    cout << ret << endl;
}

Quote basic;
Bulk_quote bulk;

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

注意:

c++ 中,使用基类的引用或者指针调用虚函数来发生动态绑定


1. 定义基类和派生类

  • 基类

基类集中了派生类共有的特征,通过将函数设置成虚拟函数来说明希望派生类定义自己的版本,而如果派生类没有定义自己的版本,则会继承基类的版本,并且隐式保持着虚拟的状态。

class Quote {
public:
    Quote() = default;
    virtual ~Quote() = default; 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++程序设计 扫描版,谭浩强编著,清华大学出版社,2004年6月第一版。 注意:其他两卷在本网页下面我的其它资源里可以找到 内容简介 C++是近年来国内外广泛使用的现代计算机语言,它既支持面向过程的程序设计,也支持基于对象和面问对象的程序设计。国内许多高校已陆续开设了C++程序设计课程。但是由于C++涉及概念很多,语法比较复杂,内容十分广泛使不少人感到学习难度较大,难以人门。 本书作者深入调查了我国大学的程序设计课程的现状和发展趋势参阅了国内外数十种有关C++的教材,认真分析了学习者在学习过程中遇到的困难,研究了初学者的认识规律。在本书中做到准确定位,合理取舍内容,设计了读者易于学习的教材体系,并且以通俗易懂的语言化解了许多复杂的概念,大大减少了初学者学习C++的困难。 考虑到许多读者在学习C++前未学过其他语言本书把入门起点降低,读者不需要具备C语言的基础。本书包括14章,分为4 篇:基本知识面向过程的程序设计;基于对象的程序设计面向对象程序设计。本书内容全面,例题丰富,概念清晰,循序渐进,易于学习。 本书是依据ANSI C++标准进行介绍的,引导读者从开始就按标准C++的规定编程。本书配有两本辅导教材,即《C++程序设计题解与上机指导》 和《C++编程实践指导》。 本书是大学各专业学生学习C++的基础教材,也是适于初学者学习的教材。即使没有教师讲授,读者也能看懂本书的大都分内容

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值