再谈面向对象多态及C++实践

多态特性:

提起面向对象,很自然地想到三大特性:封装、继承、多态。他们的目录分别是:

1. 封装,使代码模块化封装内部结构和状态。

2. 继承,用于扩展原有代码。

3. 多态,方便接口重用,通过同一接口和传入的对象调用适用于不同对象的实现。多态在运行时绑定函数,而非多态则在编译期就已确定了函数的调用地址。

从架构设计的层面来看多态有什么好处呢?将源码和运行的依赖进行反转。

通常在系统中一个函数调用另一个函数,不论是运行时还是源码中都以是相同方向进行依赖,即调用模块依赖于被调用模块。

而多态则使得源码依赖方向发生了反转,调用模块不再依赖被调用模块,两者只依赖一个多态接口。通过控制反转和依赖注入将依赖的被调用模块注入到调用模块中去,这种工作方式即是插件的工作原理。在工程实践当中插件架构是健壮的,其使得稳定高价值的业务规则不再依赖于低价值易变化的模块。

结论:健壮的业务系统架构需使用多态性。

C++关于多态的工程实践:

在C++语言中支持两种多态性,即编译时多态(通过重载函数实现)和运行时多态(通过虚函数实现)。这里主要谈运行时的多态性实践。最常见的用法即声明基类指针,再利用该指针指向任意一个子类对象,调用相应的子类对象的虚函数实现。具体有如下两种方式:

1. 虚函数

虚函数是在基类中被声明为virtual,并在派生类中重新定义的成员函数,可实现成员函数的动态覆盖(Override)。

2. 抽象类

包含纯虚函数(函数声明形如:virtual
void funtion()=0 )的类称为抽象类。纯虚函数是在基类中声明的虚函数,由于它在基类中没有定义,故要求任何派生类都要定义自己的实现方法,进而达到了实现多态特性的目的,工程实践中常利用抽象类作为接口使用。

时间: 2024-08-03 17:55:30

再谈面向对象多态及C++实践的相关文章

Java基础——再谈面向对象

去年的这个时候,心血来潮写了篇<简述面向对象技术>,先在看来不由的会想:这都是写的什么跟什么啊?(ps:虽然现在写的博客依然不咋地)但是,Java的学习中又一次不得不再一次面向对象,所以,奉上一篇<再谈面向对象>,做为新年的一盘开胃菜. 面向对象是相对于面向过程而言,是一种思想. 区别于面向过程: 面向过程是以函数为基础,完成各种操作,强调的是过程,而面向对象是以对象为基础,强调的是对象. 比如说把大象装进冰箱分为几步,宋丹丹是这样说的:三步呗, 第一步:打开冰箱门, 第二步:把大

简单再谈面向对象

业务需求 :“清洗苹果->吃苹果” 面向对象是一种思维,不是使用了类就是使用了面向对象. 面向对象要处理的不是问题本身,问题本身可以通过面向对象设计的架构进行处理.譬如“清洗苹果->吃苹果”这个功能. 面向过程需要针对业务事件,设计编写相应的处理功能,控制实现步骤,先实现“清洗苹果“,再处理”吃苹果”问题. 1.在面向对象的理解下,他应该是用了两个步骤完成了一个功能,我们要实现一个控制器,而这个 控制过程处理的就是 一种“抽象的功能体”,进而会使用到,封装,继承,多态.而上述的苹果事件,只是

【Java基础】--再谈面向对象

面向对象总结 V1.0     2014.9.14 面向对象总结V2.0   2015.8.14 对照之前的J2SE总结,发现现在的似乎更加的注重联系,開始能把细节的东西都编制到知识网络里面,导图的图片真的非常赏心悦目.

Mysql数据库大量删除操作及谈面向对象中的封装继承和多态原理(图)

Mysql数据库大量删除操作及谈面向对象中的封装继承和多态原理(图)最近进行数据库操作,遇到一个问题,就是大量删除一个数据表中的数据后,由于设定了id是自增的,导致再插入时,默认生成的id会很大,这个时候想要再次插入新的数据,应该怎么办呢?1.明确目前最后一个id的大小select id from tags order by id DESC limit 0,1; 假设返回的是9,则设置数据表从10开始自增 2.修改这个数据表从10开始自增alter table tags auto_increme

C++ Primer 学习笔记_73_面向对象编程 --再谈文本查询示例

面向对象编程 --再谈文本查询示例 引言: 扩展第10.6节的文本查询应用程序,使我们的系统可以支持更复杂的查询. 为了说明问题,将用下面的简单小说来运行查询: Alice Emma has long flowing red hair. Her Daddy says when the wind blows through her hair, it looks almost alive, like a fiery bird in flight. A beautiful fiery bird, he

C++ Primer 学习笔记_74_面向对象编程 --再谈文本查询示例[续/习题]

面向对象编程 --再谈文本查询示例[续/习题] //P522 习题15.41 //1 in TextQuery.h #ifndef TEXTQUERY_H_INCLUDED #define TEXTQUERY_H_INCLUDED #include <iostream> #include <fstream> #include <sstream> #include <vector> #include <set> #include <map&g

C++ Primer 学习笔记_73_面向对象编程 -再谈文本查询示范

面向对象编程 --再谈文本查询示例 引言: 扩展第10.6节的文本查询应用程序,使我们的系统可以支持更复杂的查询. 为了说明问题,将用下面的简单小说来运行查询: Alice Emma has long flowing red hair. Her Daddy says when the wind blows through her hair, it looks almost alive, like a fiery bird in flight. A beautiful fiery bird, he

C++ Primer 学习笔记_74_面向对象编程 -再谈文本查询示范[续/习题]

面向对象编程 --再谈文本查询示例[续/习题] //P522 习题15.41 //1 in TextQuery.h #ifndef TEXTQUERY_H_INCLUDED #define TEXTQUERY_H_INCLUDED #include <iostream> #include <fstream> #include <sstream> #include <vector> #include <set> #include <map&g

C++ Primer 学习笔记_44_STL实践与分析(18)--再谈迭代器【下】

STL实践与分析 --再谈迭代器[下] 三.反向迭代器[续:习题] //P355 习题11.19 int main() { vector<int> iVec; for (vector<int>::size_type index = 0; index != 10; ++index) { iVec.push_back(index); } for (vector<int>::reverse_iterator r_iter = iVec.rbegin(); r_iter !=