纯虚函数是指类似 virtual void Do()=0 的函数,含有纯虚函数的类是抽象类,不能实例化对象,其子类需实现所有纯虚函数方能实例化对象。

以上面向对象的规则读者应该都比较清楚,但有个问题大多数教程都没有详细说明。若class A有2个虚函数Do1、Do2;class B继承自A,实现了Do1;class C继承自B,实现了Do2。那么请问C能不能实例化对象?

答案是可以。可以这样考虑,当思考C是否能实例化对象时,就看其是否实现了其父类(farther)B中的纯虚函数是否全部实现。而B中只有1个(从A继承来的)纯虚函数Do2,被C所实现。所以C可以实例化对象。

上代码:

class A
{
public:virtual void Do()=0;virtual void Play()=0;};class B : public A
{
public:void Do(){cout << "Do By B;" << endl;}
};class C:public B
{
public:void Play(){cout<<"Play By C;" << endl;}
};void ShowWhoDo(A &aa)
{aa.Do();aa.Play();
}void main()
{//A a;//ShowWhoDo(a);//B b;//ShowWhoDo(b);C c;ShowWhoDo(c);system("pause");
}

顺便再来个问题,1. void ShowWhoDo(A &aa)中&能否不要?2.上述代码输出什么?

抽象类的继承/纯虚函数的实现相关推荐

  1. C++抽象类详解--纯虚函数,抽象类

    在介绍抽象类之前,我们先介绍一下纯虚函数. 1.纯虚函数 在基类中仅仅给出声明,不对虚函数实现定义,而是在派生类中实现.这个虚函数称为纯虚函数.普通函数如果仅仅给出它的声明而没有实现它的函数体,这是编 ...

  2. 虚函数、纯虚函数、虚基类、抽象类、虚函数继承、虚继承

    虚函数:虚函数是C++中用于实现多态(polymorphism)的机制.核心理念就是通过基类访问派生类定义的函数.是C++中多态性的一个重要体现,利用基类指针访问派生类中的成员             ...

  3. C++中的各种“虚“-- 虚函数、纯虚函数、虚继承、虚基类、虚析构、纯虚析构、抽象类讲解

    C++中的各种"虚" 1. 菱形继承 1.1 虚继承 && 虚基类 1.2 虚基类指针(vbptr)&& 虚基类表(vbtable) 2. 多态 2 ...

  4. C++中的抽象类及纯虚函数的实现与否

    1.含有纯虚函数的叫抽象类 2.抽象类(一般是基类)中的纯虚函数无论函数体实现与否,都没有关系,系统会自动忽略 3.继承自抽象类的子类,必须要实现父类的纯虚函数才可以实例化对象 4.抽象类不允许实例化 ...

  5. c++虚继承和虚函数和抽象类、接口类,聚合类

    虚继承 虚继承用于解决多继承条件下的菱形继承问题(浪费存储空间.存在二义性). 底层实现原理与编译器相关,一般通过虚基类指针和虚基类表实现,每个虚继承的子类都有一个虚基类指针(占用一个指针的存储空间, ...

  6. 【C++grammar】访问控制与抽象类与纯虚函数

    目录 一.访问控制 (可见性控制) 1.private.public.protected关键字 2.关键字示例 1.关键字对类数据成员访问的限制 3. 公有继承 4. 私有继承 5. 保护继承 6. ...

  7. c++多态--2(计算器,纯虚函数和抽象类)

    为什么要用多态 早期方法不利于扩展 开闭原则 开闭原则 对扩展开放 对修改关闭 利用多态实现-利于后期扩展,结构性非常好,可读性高,效率稍微低,发生多态内部结构复杂 多态成立的条件 又继承 子类重写父 ...

  8. C++纯虚函数与抽象类

    纯虚函数 1.1纯虚函数是在声明虚函数时被"初始化"为0的函数.声明纯虚函数的一般形式为: virtual 函数类型 函数名 (参数列表) =0; 如 virtual float ...

  9. C++之继承探究(十):抽象基类与纯虚函数

    前文:C++之继承探究(九):多态的代价 抽象基类与纯虚函数   ♠\spadesuit♠ 纯虚函数:虚函数只有声明,函数体=0,就是一个纯虚函数,纯虚函数没有函数体,不需要实现.在子类里实现纯虚函数 ...

最新文章

  1. pxe linux 配置文件,Linux PXE 部署
  2. 家用电器用户行为分析与事件识别_用户行为分析系统
  3. Spring Boot开始
  4. @Autowired自动装配对象和new对象的区别
  5. 肝一波 ~ 手写一个简易版的Mybatis,带你深入领略它的魅力!
  6. Java学习需要掌握哪些技能?
  7. redis维护问题总结
  8. angularjs1.X进阶笔记(3)——如何重构controller
  9. 百度将砸钱100多亿元建云计算中心(2012-09-03)
  10. LeetCode(561)——数组拆分 I(JavaScript)
  11. 高中电子技术——二极管的类型和作用
  12. android eclipse下载
  13. pillow英文手册
  14. Centos7 下载安装Redis
  15. php 屏蔽deprecated,解决php deprecated 的问题
  16. 布谷鸟哈希函数的参数_Cuckoo Hash 布谷鸟哈希
  17. BlueTooth Android开发基础
  18. 骂人的到底是些什么人
  19. 面试题 02.07. 链表相交
  20. 高速电路设计与仿真之过孔篇

热门文章

  1. [转载] opengl能做什么_python能做什么
  2. [转载] Python将列表转换成字符串及字符串左右中对齐输出问题
  3. [转载] python字符串只留数字_Python工匠:数字与字符串(下)
  4. [转载] C++学习之异常处理详解
  5. [转载] 【python第四天】 注释和缩进
  6. Winfrom窗体无法关闭问题--检查是否存在重写
  7. 因特网人群信息的应用-通过人群性格特点投放定制广告
  8. 汇编3-返回以及优化
  9. 怎么解锁blockinput锁定的键盘_“键盘云”--锐角云母公司(Acute angle)又一款矿渣神器...
  10. 虚拟服务器的外部跟内部端口,虚拟服务器设置 外部端口