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

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

1 虚函数

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

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

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


    Note:

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

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

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

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


2 纯虚函数

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

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

   

 3 抽象类   

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

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

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


    

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

关于C++中的友元函数的总结

1.友元函数的简单介绍 1.1为什么要使用友元函数 在实现类之间数据共享时,减少系统开销,提高效率。如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数...

C语言学习笔记之文件的分割与合并

分割与合并的思想1. 分割:和安卓多线程下载类似 ,首先将文件长度按N段分,然后将每段文件读取并写入到相应的临时文件,以达到分割的目的 2. 合并:将每段临时文件依次读取,然后写入到要合并成的新文件...

纯虚函数和抽象类的实例

  • 2015年04月14日 19:33
  • 1.67MB
  • 下载

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

C++里的抽象类和纯虚函数在C++中,含有至少一个纯虚函数的类是抽象类,但是注意在C++中没有abstract这个关键字,所以C++里面的抽象类无需添加abstract这个单词。抽象类不可以直接实例化...

C++纯虚函数与抽象类

纯虚函数: 纯虚函数:在基类中将某一成员函数定为虚函数,并不是基类本身的需要,而是考虑到派生类的需 要,在基类中预留了一个函数名,具体功能留给派生类根据需要去定义。 纯虚函数是在声明虚函数时被“...

C++笔记——纯虚函数和抽象类

1:纯虚函数和抽象类 1>纯虚函数是一个在基类中说明的虚函数,在基类中没有定义,要求任何派生类都定义自己的版本 2>纯虚函数为各派生类提供一个公共界面(接口的封装和设计、软件的模块功能划分) 3...

c++远征之多态篇(纯虚函数和抽象类)

一:多态概念 指相同对象收到不同消息或者不同对象收到相同消息时产生不同的动作。 多态又分为:静态多态(早绑定)和动态多态(晚绑定) 二:虚函数及其原理 /*********************...

C++第十三周【任务4】设计一个抽象类CSolid,含有两个求表面积及体积的纯虚函数,同时设计个派生类CCube、CBall、CCylinder

/* * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生  * All rights reserved. * 文件名称:C++第十三周【任务4】 ...

C++中的纯虚函数与抽象类

#include using namespace std; /* *抽象类是一种特殊的类,它为一个类族提供统一的操作界面。抽象类是为了抽象和设计的目的而建立的。它相当于JAVA中的接口。 *但是与ja...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++虚函数和纯虚函数和抽象类
举报原因:
原因补充:

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