C++虚函数和纯虚函数和抽象类

原创 2016年08月31日 13:31:53

1 虚函数

    虚函数是类的一种特殊成员函数,主要是为实现C++的多态特性引入。

    虚函数之所以“虚”是因为调用的虚函数不是在静态编译(静态编联)时确定,而是在运行时通过动态编联确定的。

    多态核心理念即是通过基类访问派生的子类,通常情况是借助基类指针来访问派生类对象。


    Note:

    1)析构函数通常声明为虚函数,这样在有继承场合,可以做到基于对象类型动态调用正确对象类型的析构函数,完成相应的对象析构。

    2)友元函数不是成员函数,只有成员函数才能是虚函数,所以友元函数不能是虚函数;但是友元函数可以通过调用成员虚函数达到虚拟化效果。

    3)通过虚函数可以实现多态灵活,但是虚函数也有缺点如占用更多内存(虚表),运行效率低(需要查找虚表找到正确函数)。

    4)通常普通函数(非成员函数)和类中不能继承(只属于本类)的函数(构造函数/static成员函数/inline成员函数/友元函数)不能声明为虚函数;不能声明为虚函数的函数共同点基本都是静态编联,而虚函数要靠动态编联机制才能起作用。


2 纯虚函数

    纯虚函数是一种特殊的虚函数,通常定义在基类中。纯虚函数在基类中定义方法是在函数声明末尾加“=0”,如 virtual func(int, int) = 0。

    纯虚函数的“纯”体现为基类不需要实现它,其主要作用是为派生类定义函数接口框架,由派生类完成纯虚函数的实现。

   

 3 抽象类   

    如果一个类包含有纯虚函数,则该类称为抽象类。

     抽象类一般只能是基类,其声明的纯虚函数由派生类实现。如果派生类没有重写(覆盖)抽象类的纯虚函数则派生类也是抽象类。

     对象不能基于抽象类创建,必须基于派生出来的具体类创建对象。


    

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

抽象类与纯虚函数

纯虚函数是一种特殊的虚函数,它的一般格式如下:    class     {        virtual ()=0;        …    };    在许多情况下,在基类中不能对虚函数给出有意义...
  • tang_ming
  • tang_ming
  • 2010年08月20日 15:47
  • 4879

C++的虚基类,抽象类,虚函数,纯虚函数,virtual

C++的虚基类,抽象类,虚函数,纯虚函数,virtual 虚基类 在说明其作用前先看一段代码 class A { public: int iValue; }; class ...
  • shejiannan
  • shejiannan
  • 2015年05月20日 14:21
  • 1507

C++学习篇——纯虚函数和抽象类

纯虚函数是一种特殊的虚函数,它的一般格式如下:     class     {         virtual ()=0;         …     };     在许多情况下...
  • yansmile1
  • yansmile1
  • 2016年04月13日 23:03
  • 487

C++中对纯虚函数和多态的理解

    抽象类是一种特殊的类,它是为了抽象和设计的目的为建立的,它处于继承层次结构的较上层。       ⑴抽象类的定义:       称带有纯虚函数的类为抽象类。     ...
  • zhanghuaichao
  • zhanghuaichao
  • 2016年10月10日 16:11
  • 786

C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别

1.虚函数(impure virtual)   C++的虚函数主要作用是“运行时多态”,父类中提供虚函数的实现,为子类提供默认的函数实现。   子类可以重写父类的虚函数实现子类的特殊化。   如...
  • ybhjx
  • ybhjx
  • 2016年06月30日 10:45
  • 3425

虚函数和纯虚函数的区别

首先:强调一个概念 定义一个函数为虚函数,不代表函数为不被实现的函数。 定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。 定义一个函数为纯虚函数,才代表函数没有被实现。 定义纯虚函数是为了实...
  • Hackbuteer1
  • Hackbuteer1
  • 2012年05月11日 22:35
  • 112118

关于C++虚函数和纯虚函数

虚函数为了重载和多态的需要,在基类中是由定义的,即便定义是空,所以子类中可以重写也可以不写基类中的函数! 纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数! 虚...
  • pamchen
  • pamchen
  • 2013年03月06日 12:05
  • 1029

C++中虚函数与纯虚函数以及虚继承的相关知识

这篇文章主要利用网上的博客,经过自己的总结写成,不免出现错误情况,如有错误,请指正。 虚函数 首先是虚函数的意义。在面向对象的设计思想中,虚函数的作用是实现多态性。如何实现多态呢?下面看C++虚函数表...
  • chy19911123
  • chy19911123
  • 2015年09月08日 20:42
  • 502

虚函数和抽象类

在基类中的某成员函数被声明为虚函数后,在之后的派生类中科以重新来定义它。但定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型的顺序,都必须和基类中的原型完全相同。其实在上述修改后的示例代码里...
  • dongzhiliu
  • dongzhiliu
  • 2015年02月27日 18:23
  • 508

虚函数与抽象类

抽象类不是实际存在的类,所以你不能定义一个抽象类的对象,但是却可以定义一个指向抽象类的指针。 抽象类仅仅起到了为派生类提供一个接口的作用,这个接口类的纯虚函数可以没有任何作用,派生类将这些纯虚函...
  • u012987387
  • u012987387
  • 2013年11月29日 22:37
  • 525
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++虚函数和纯虚函数和抽象类
举报原因:
原因补充:

(最多只允许输入30个字)