1.含有纯虚函数的叫抽象类

2.抽象类(一般是基类)中的纯虚函数无论函数体实现与否,都没有关系,系统会自动忽略

3.继承自抽象类的子类,必须要实现父类的纯虚函数才可以实例化对象

4.抽象类不允许实例化对象,只能作为一个基类或虚接口使用

5.抽象类的指针可以指向不同的派生类对象(虚函数的功能)

class Father{
public:
virtual void fun() = { int a = ; };//抽象类中的纯虚函数,函数体实现了也相当于没实现,自动忽略
};
Father f;//报错,抽象类(含有纯虚函数的类),不允许实例化

6.普通函数,友元函数,构造函数都不可以是虚函数,其他成员函数,析构函数可以是虚函数

分析:

a.普通函数和友元函数都不属于类的成员,因此没有虚函数这个概念

b.构造函数如果是虚函数,则在继承的场合,只会构造子类,不会构造父类了,显然不可以

c.在虚继承的场合,即多重继承产生菱形继承时,虚继承可以防止公共基类被重复构造

d.虚析构函数是为了当用一个基类的指针删除一个派生类的对象时,派生类的析构函数也会被调用。

C++中的抽象类及纯虚函数的实现与否的更多相关文章

  1. 《挑战30天C++入门极限》类的分解,抽象类与纯虚函数的需要性

        类的分解,抽象类与纯虚函数的需要性 为了不模糊概念在这里我们就简单的阐述一下类的分解,前面的教程我们着重讲述了类的继承,继承的特点就是,派生类继承基类的特性,进行//站点:www.cndev- ...

  2. C++语言基础(13)-抽象类和纯虚函数

    一.基本语法 在C++中,可以将虚函数声明为纯虚函数,语法格式为: ; 纯虚函数没有函数体,只有函数声明,在虚函数声明的结尾加上=0,表明此函数为纯虚函数. 最后的=0并不表示函数返回值为0,它只起形 ...

  3. c++抽象类,纯虚函数

  4. c++虚函数,纯虚函数,抽象类,覆盖,重载,隐藏

    C++虚函数表解析(转) ——写的真不错,忍不住转了  http://blog.csdn.net/hairetz/article/details/4137000 浅谈C++多态性  http://bl ...

  5. C++:纯虚函数与抽象类

    5.4.3 纯虚函数和抽象类 纯虚函数是一个在基类中说明的虚函数,它在该基类中没有定义,但是要求在派生类中根据需要对它进行定义,或仍然说明为纯虚函数. 声明纯虚函数的一般格式是: virtual 函数 ...

  6. c++,纯虚函数与抽象类

    1.纯虚函数的定义: (1)虚函数被“初始化”为0的函数.声明纯虚函数的一般形式是virtual 函数类型 函数名(参数表列) =0;(2)纯虚函数没有函数体:(3)最后面的“=0”并不表示函数返回值 ...

  7. C++虚函数virtual,纯虚函数pure virtual和Java抽象函数abstract,接口interface与抽象类abstract class的比较

    由于C++和Java都是面向对象的编程语言,它们的多态性就分别靠虚函数和抽象函数来实现. C++的虚函数可以在子类中重写,调用是根据实际的对象来判别的,而不是通过指针类型(普通函数的调用是根据当前指针 ...

  8. C++中纯虚函数

    1.纯虚函数 virtual ReturnType Function()= 0; 纯虚函数可以让类先具有一个操作名称,而没有操作内容,让派生类在继承时再去具体地给出定义.凡是含有纯虚函数的类叫做抽象类 ...

  9. C++纯虚函数、虚函数、实函数、抽象类,重载、重写、重定义

    首先,面向对象程序设计(object-oriented programming)的核心思想是数据抽象.继承.动态绑定.通过数据抽象,可以使类的接口与实现分离,使用继承,可以更容易地定义与其他类相似但不 ...

随机推荐

  1. 使用Git上传本地项目代码到github

    前提:(1)ssh密钥(让本地与git链接) &  (2)装好gitbash 1.git中创建好库 2.文件夹中输入:git init (出现隐藏的.git文件) 3.git remote a ...

  2. about control %CPU

    #include <stdio.h> #include <unistd.h> #include <stdlib.h> #define timesize 200000 ...

  3. 《cocos2d-x游戏开发》—— lua学习总结(一)数组的使用

    在lua中,数组是用table来实现的. 1.数组的定义: self.itemArrays = {}; --作为数组来使用的表itemArrays 2. 数组插入一条数据: local showIte ...

  4. MYSQL将表名称修改成大写的存储过程

    1. 条件: 1.1 Mysql设置对大小写敏感 2. 执行下述存储过程: #call uppercase('库名') DROP PROCEDURE IF EXISTS uppercase; )) B ...

  5. Spring事务:传播行为与隔离级别

    文章主要来源:https://github.com/dengdaiyemanren/onetopiconeday/wiki/spring%E4%BA%8B%E5%8A%A1%E9%85%8D%E7%B ...

  6. POJ C程序设计进阶 编程题#1:寻找下标

    编程题#1:寻找下标 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 已知一 ...

  7. linux下不重启添加硬盘

    linux下热加载磁盘 临时给虚拟机加了一块硬盘,增加后懒得重启,于是看了看热加载 [root@centos5 ~]# cat /proc/scsi/scsiAttached devices:Host ...

  8. silverlight 获取路径 config

    1.获取web.config配置内容: web.config default.aspx protected string InitParams { get; set; } InitParams = s ...

  9. GemFire 入门篇1:GemFire 是什么?

    一.GemFire是什么?   如果你了解Redis或memCached,那么恭喜,你很快就能理解GemFire是什么,没错,你可以把它理解为一个增强版的Redis,具体在哪些方面增强,我们日后慢慢聊 ...

  10. Ubuntu开发环境搭建

    linux开发不得不用虚拟机,为了节省系统资源.决定采用Ubuntu Server逐步搭建出具有图形界面的开发环境. ubuntu server 安装英文版 安装选择选generic,不要LVM选项. ...