一、定义.
纯虚函数是在基类
中声明的虚函数,它在基类中没有定义
,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0”
virtual
void funtion1()=0
二、引入原因:
1、为了方便使用多态特性,我们常常需要在基类中定义虚拟函数。
2、在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。
为了解决上述问题,引入了纯虚函数的概念,将函数定义为纯虚函数(方法:virtual ReturnType Function()= 0;),则编译器要求在派生类中必须予以重载以实现多态性
。同时含有纯虚拟函数的类称为抽象类,它不能生成对象。这样就很好地解决了上述两个问题。
三、相似概念:
1、多态性
指相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动作。C++支持两种多态性:编译时多态性,运行时多态性。
a.编译时多态性:通过重载函数
实现
b 运行时多态性:通过虚函数
实现。
2、虚函数
虚函数是在基类中被声明为virtual,并在派生类中重新定义的成员函数,可实现成员函数的动态重载
3、抽象类
包含纯
虚函数的类称为抽象类
。由于抽象类包含了没有定义的纯虚函数,所以不能定义抽象类的对象。
程序举例
:
基类:
class A
{
public:
A();
void f1();
virtual void f2();
virtual void f3()=0;
virtual ~A();
};
子类:
class B : public A
{
public:
B();
void f1();
void f2();
void f3();
virtual ~B();
};
主函数:
int main(int argc, char* argv[])
{
A *m_j=new B();
m_j->f1();
m_j->f2();
m_j->f3();
delete m_j;
return 0;
}
f1()是一个普通的重载.
调用m_j->f1();会去调用A类中的f1(),它是在我们写好代码的时候就会定好的.
也就是根据它是由A类定义的,这样就调用这个类的函数.
f2()是虚函数.
调用m_j->f2();会调用m_j中到底保存的对象中,对应的这个函数.这是由于new的B
对象.
f3()与f2()一样,只是在基类中不需要写函数现实.
分享到:
相关推荐
纯虚函数实现接口并且做成了dll动态链接库
该资源是博主博客的源代码,博客上有详细讲解Qt/C++关于纯虚函数和抽象基类原理讲解和示例用法解释,博客地址如下: https://blog.csdn.net/naibozhuan3744/article/details/94488200 其中编译环境为QtCreator4.5.0...
函数覆盖,虚函数,纯虚函数对比。c++ 源代码
C++ 纯虚函数
关于Java与C++在虚函数,纯虚函数上的区别
在c++学习的过程中,尤其是自学,遇到这样那样的函数,尤其是虚函数这一块,并且虚函数的类型还多,让人真是头痛,这个是我在学习过程中搜索的一点资料,希望对大家能够有所帮助。
系统的介绍C++里面的虚函数与抽象类概念,并举例概述
《Visual C++2012入门经典(第6版)》实例
c++普通函数,虚函数,纯虚函数的区别
通过小的代码实例段来讲解虚函数和纯虚函数之间的关系、用法
纯虚函数是一种特殊的虚函数,它的一般格式如下: class <类名> { virtual <类型><函数名>(<参数表>)=0; … }; 在许多情况下,在基类中不能对虚函数给出有意义有实现,而把它说明为...
C++虚函数多态和纯虚函数多态的经典示例源码
纯虚函数void Speak (); 纯虚函数void GetInfo; (2) 在Pet类的基础上派生出猫类Cat: 数据成员(protected): int id; // 猫的编号; 函数成员(public): 构造函数 (提示: 自已定义其形式,注意基类的构造...
纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数! 虚函数 引入原因:为了方便使用多态特性,我们常常需要在基类中定义虚函数。 class Cman { public: virtual void Eat(){……}; void ...
C++纯虚函数详解 有时在基类中将某一成员函数定为虚函数,并不是基类本身的要求,而是考虑到派生类的需要,在基类中预留了一个函数名,具体功能留给派生类根据需要去定义。 纯虚函数是在声明虚函数时被“初始化”为0...
具体请看下代码例://含有纯虚函数,因此Cat为抽象类class CatA : public Cat {//实现了eat()函//仍为纯虚函数,因此CatA也是
1)声明抽象基类Shape,由它派生出3个派生类:Circle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数printArea分别输出以上三者的面积,3个图形的数据在定义对象时给定。 (2)新建一个基类shape类是...
虚函数和纯虚函数.pdf
虚函数和纯虚函数的理解区别,最重要的是知道虚函数和纯虚函数的用法