谈谈c++纯虚函数的意义!

纯虚函数的存在有什么意义呢?相信大学如果有c++这么课程,在讲到纯虚函数时,必定会讲到纯虚函数是面向接口编程的基础。

现在和大家分享下纯虚函数设计的原由、目的、产生的效果。

现代软件工程非常庞大,所以出现了各种技术来解决其中的问题。

现代软件都是由各种基础库、底层库、通信库等等组成,并且自身业务还会有分为各个模块。

各个模块之间的协作引入了纯虚函数这个技术。

为什么要用这个技术:

问:A模块进行开发并且依赖于B模块,但是B模块还未进行开发,只有一套接口。如果没有纯虚函数会怎么样呢?

A模块的编译会失败。C语言通过接口空实现的方式来避免这个问题。但是问题这样解决既不美观,又不方便。

所以C++引入了存虚函数,并且配合多态特性,完美的解决了这个问题。

纯虚函数解决了就算只有接口可以编译通过,并且多个模块之间的依赖关系不用修改任何代码。

解释:编译的时候,编译器会根据函数声明去找函数定义。如果没有定义则编译失败。

好处:

纯虚函数的引入,c++面向接口编程变的非常优美,和多态配合面向对象编程在跨模块编程中如鱼得水。

题外话:

面向接口编程是软件工程六大定义之一,如此的重要,所以java在纯虚函数的基础上定义了接口类。更加清晰的支持了面向接口编程。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2025-01-11 02:18:23

谈谈c++纯虚函数的意义!的相关文章

抽象类,虚函数,纯虚函数的意义

C语言是面向过程的语言,C++是面向对象的语言,区分它们面向什么的重要区别在于C++比C多个类.那么在我看来,抽象就是类的升华. 一般刚学习C++的时候,抽象这个东西给人最大的感觉就是太抽象,很难理解.心里总是想着,其实这样或那样就能解决这个问题了,为什么要学这个?增加一个抽象类还增加一段代码,费事不说还不容易理解,所以当时我对抽象还是很抗拒的.但是当工作中真正用到这个的时候,就觉得这个东西真是太好了,任何其它的方案都无法代替抽象. 为什么这样说呢?首先C++是强类型语言,对于一个数组或链表来讲

虚函数、纯虚函数和接口的实用方法和意义

从理论上来说,这三个概念很容易背的滚瓜烂熟,但是从大学毕业到现在,我都没真正搞明白这三个东西的出现,究竟是为了做到什么事情. 也许之前我很少写代码,更很少写面向对象的代码,即使有写多半也很容易写回到面向过程的老路上去.在写面向过程的代码的时候,根本不管什么函数重载和覆盖,想到要什么功能就变得法子的换个函数名字,心里想想:反正函数重载本质也就是入栈了两个不同的函数. 知道后来我才慢慢了解,这些概念的出现,完全就不是为了编程的功能实现,而是编程的易用和扩展,准确的来说是方便再次开发而提出的一种标准而

C++ 虚函数 、纯虚函数、接口的实用方法和意义

也许之前我很少写代码,更很少写面向对象的代码,即使有写多半也很容易写回到面向过程的老路上去.在写面向过程的代码的时候,根本不管什么函数重载和覆盖,想到要什么功能就变得法子的换个函数名字,心里想想:反正函数重载本质也就是入栈了两个不同的函数. 回过头来讲,让我了解标题这三个概念的实际用处,还是在于我这第四次重写毕业论文的代码,将它改写成面向对象的时候,才理解的.在面向对象设计的过程中, 类是从抽象逐渐具体起来的,父类可以是非常非常抽象的东西,而最终实例化的子类就非常具体了.在这个继承的过程中,不断

关于纯虚函数

在定义和实现COM接口时,纯虚函数有不可替代的作用.举个例子,可能有些牵强,但是能说明问题.比如,我有一个类Animal,维护了一种动物形象,现在我要实现一个函数Draw,把这个动物画到任意一种介质上,这种介质可能是屏幕也可能是位图,当然,在屏幕和位图上画图形肯定是不一样的,那么,我的Draw函数肯定要有一个介质参数,每种介质对应一个版本的Draw函数,这样很麻烦,有了纯虚函数,就完全可以定义一个抽象类,以这个抽象类为参数,只写一个版本的Draw函数就可以了.这个抽象类就是把在屏幕和位图上的绘图

虚函数和纯虚函数的区别

首先:强调一个概念定义一个函数为虚函数,不代表函数为不被实现的函数.定义他为虚函数是为了允许用基类的指针来调用子类的这个函数.定义一个函数为纯虚函数,才代表函数没有被实现.定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数.1.简介假设我们有下面的类层次: class A { public: virtual void foo() { cout<<"A::foo() is called"<<endl; } }; class

C++中虚函数和纯虚函数的总结

虚函数与纯虚函数 在他们的子类中都可以被重写.它们的区别是:(1)纯虚函数只有定义,没有实现:而虚函数既有定义,也有实现的代码. 纯虚函数一般没有代码实现部分,如virtual void print() = 0; 而一般虚函数必须要有代码的实现部分,否则会出现函数未定义的错误.virtual void print(){ printf("This is virtual function\n"); }(2)包含纯虚函数的类不能定义其对象,而包含虚函数的则可以. 定义为虚函数是为了允许用基类

纯虚函数与抽象基类

这一节我们主要介绍一下抽象基类与纯虚函数的关系 首先,我们来看看纯虚函数 1.纯虚函数的定义   纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法.在基类中实现纯虚函数的方法是在函数原型后加"=0".如下     virtual void funtion()=0 2.定义纯虚函数的目的和意义 定义纯虚函数是为了实现一个接口,起到一个规范的作用.纯虚函数的意义在于:让所有的类对象(主要是派生类对象)都可以执行纯虚函数的动作,但类无法为纯虚函数提供

虚函数与纯虚函数

ifndef bmw_h #define bmw_h class W {   public:     virtual void f(void) = 0;//纯虚函数=0 virtual void g(void) = 0; //纯虚函数 virtual void h(void) = 0; virtual void k(void);//虚函数 }; class MW : public virtual W { public:     virtual void g(void);//派生类重写函数g(vo

关于虚函数与纯虚函数的区别

转自: https://blog.csdn.net/hackbuteer1/article/details/7558868 注: 该博主是个大牛,虽然早已经不更新了,但是分享了很多数据结构的面试题,值得翻阅学习. 重点笔记摘要如下: 定义一个函数为虚函数,不代表函数为不被实现的函数. 定义他为虚函数是为了允许用基类的指针来调用子类的这个函数.(我想这就是虚函数的意义吧,下面基本都在讲纯虚函数和抽象类) 定义一个函数为纯虚函数,才代表函数没有被实现. 定义纯虚函数是为了实现一个接口,起到一个规范的