Essential C++ 第5章 面向对象编程风格

简介: Essential C++ 第5章 面向对象编程风格

第5章 面向对象编程风格


5.1 面向对象编程概念

 面向对象编程的两项最主要的特质是:继承(inherittance)和多态(polymorphism)。

继承能够将一群相关的类组织起来,分享共同的数据和操作。

多态能让我们在这些类之上进行编程时,可以如同操纵单一个体,赋予我们更多弹性来操作类。

 继承机制定义了父子关系。父类定义了所有子类共通的公有接口和私有实现。每个子类都可以增加新的或覆盖继承来的东西。

 在C++中,父类被称为基类,子类被称为派生类。

 面向对象变成风格的第二个独特概念是多态:让基类的pointer或reference得以十分透明地指向其任何一个派生类的对象。

 动态绑定(dynamic binding)是面向对象编程风格的第三个独特概念。

如我们写下 mat.check_in(), 函数执行时会根据mat所指的实际对象来决定调用哪一份check_in()。


5.2 漫游:面向对象编程思维

virtual: 默认情况下,Member function的解析在编译时静态地进行,若要在运行时动态进行,我们要在它的声明前加上关键字 virtual,使其成为虚函数。

 实现派生类:类名之后跟: public 基类名

如:class Book : public LibMat {



}


proteceted 成员,可以被派生类直接访问。


5.3 不带继承的多态


5.4 定义一个抽象基类

 定义抽象基类的第一个步骤就是找出所有子类共同的操作行为。

设计抽象基类的下一步,是找出那些操作行为和类型相关。也就是说,那些操作必须根据不同的派生类有不同的实现方式。这些操作行为应该成为整个类继承体系中的虚函数。

第三步,便是找出每个操作的访问层级。(public、protected、private)

 每个虚函数,要么有定义,要么将其设置为纯虚函数,

virtual void gen_elems(int pos) = 0;

 凡基类有虚函数,应该将其destructor声明为virtual。


5.5 定义一个派生类

派生类必须为从基类继承而来的每个纯虚函数提供对应的实现。

 派生类有个Member和基类的Member同名,会遮盖住基类的Member,


5.6 运用继承体系


5.7 基类该多么多么抽象


5.8 初始化、析构、复制

 派生类对象的初始化,包括调用基类的constructor然后调用自己的constructor。


5.9 在派生类中定义一个虚函数

 如果我们决定覆盖基类的虚函数,那么派生类提供的新定义,其函数原型必须完全符合基类所声明的函数原型。

 例外:当基类的返回值是某个基类形式,派生类的同名函数可以返回该基类的派生类。

 我们在派生类中,为了覆盖基类的某个虚函数,而进行声明时,不一定要加上关键字virtual。

编译器会根据原型声明决定是否覆盖。


5.10 运行时的类型鉴定机制

typeid 运算符,头文件typeinfo。

让我们得以查询多态化的pointer 或reference,获得其所指对象的实际类型。


static_cast<> 无条件转换

dynamic_cast<> 有条件转换,如果符合则转换,否则返回0


相关文章
|
1月前
|
C++
C++面向对象编程
C++面向对象编程
|
1月前
|
编译器 C++
【C++类和对象下:解锁面向对象编程的奇妙世界】(下)
【C++类和对象下:解锁面向对象编程的奇妙世界】
|
13天前
|
算法 C++ 容器
Essential C++ 第3章 泛型编程风格
Essential C++ 第3章 泛型编程风格
|
13天前
|
编译器 C++
Essential C++ 第2章 面向过程的编程风格
Essential C++ 第2章 面向过程的编程风格
|
1月前
|
算法 程序员 数据安全/隐私保护
C++中的面向对象编程(OOP)深入解析
C++中的面向对象编程(OOP)深入解析
|
13天前
|
C++
Essential C++ 第7章 异常处理
Essential C++ 第7章 异常处理
|
13天前
|
算法 编译器 C++
Essential C++第4章 基于对象的编程风格
Essential C++第4章 基于对象的编程风格
|
13天前
|
存储 小程序 程序员
Essential C++ 第1章 C++编程基础 (笔记)
Essential C++ 第1章 C++编程基础 (笔记)
|
14天前
|
存储 C++ C语言
【C++语言】初步认识面向对象编程&&类和对象(上)
【C++语言】初步认识面向对象编程&&类和对象(上)
|
1月前
|
C++
C++ 递归与面向对象编程基础
C++ 递归是函数自我调用的技术,用于简化复杂问题。以递归求和为例,`sum` 函数通过不断调用自身累加数字直到 `k` 为 0。递归需谨慎,避免无限循环和资源浪费。面向对象编程(OOP)将程序划分为交互对象,具有属性和方法,提升代码复用、维护和扩展性。C++ OOP 基本概念包括类、对象、属性和方法。通过创建类和对象,利用点语法访问成员,实现代码组织。
31 0