1. #include <bits/stdc++.h>
  2. using namespace std;
  3. class A
  4. {
  5. public:
  6. A()
  7. {
  8. cout << "构造A" << endl;
  9. s = new char[];
  10. memset(s, , );
  11. strcpy(s, "hahaha");
  12. }
  13. virtual ~A()
  14. {
  15. cout << "析构A" << endl;
  16. delete []s;
  17. }
  18. virtual void print()
  19. {
  20. cout << s << endl;
  21. }
  22. private:
  23. char *s;
  24. };
  25. class B : public A
  26. {
  27. public:
  28. B()
  29. {
  30. cout << "构造B" << endl;
  31. s = new char[];
  32. memset(s, , );
  33. strcpy(s, "BBBBB");
  34. }
  35. virtual ~B()
  36. {
  37. cout << "析构B" << endl;
  38. delete []s;
  39. }
  40. virtual void print()
  41. {
  42. cout << s << endl;
  43. }
  44. private:
  45. char *s;
  46. };
  47.  
  48. void ok(A *obj)
  49. {
  50. obj->print();
  51. }
  52. void okk(A obj)
  53. {
  54. obj.print();
  55.  
  56. }

1.

  1. int main()
  2. {
  3. B *b = new B;
  4. A *obj = b;
  5. obj->print();
  6. delete b;
  7.  
  8. /*构造A
  9. 构造B
  10. BBBBB
  11. 析构B
  12. 析构A*/
  13. }

2.

  1. int main()
  2. {
  3. B *b = new B;
  4. A *obj = b;
  5. obj->print();
  6. delete obj;
  7.  
  8. /*构造A
  9. 构造B
  10. BBBBB
  11. 析构A*/
  12. }

3.

  1. int main()
  2. {
  3. B b;
  4. A a = b;
  5. A *pa = &b;
  6. a.print();//这里的a就是一个A类型的变量,它的内存布局在赋值的时候已经从B转换到A了,多于的数据都被丢弃,因此其就是一个A类型的变量。
  7. pa->print();//其是一个指针,其类型虽然是A,但指向的区域的内容却是一个B类型的内存结构,虽然内存结果的布局与A兼容,但其虚函数表中的Test却是B的实现
  8.  
  9. /*构造A
  10. 构造B
  11. hahaha
  12. BBBBB
  13. 析构A
  14. 析构B
  15. 析构A*/
  16. }

4.

  1. int main()
  2. {
  3. B *b = new B;
  4. ok(b);
  5.  
  6. /*构造A
  7. 构造B
  8. BBBBB*/
  9. }

5.

  1. int main()
  2. {
  3. B *b = new B;
  4. ok(b);
  5. delete b;
  6.  
  7. /*构造A
  8. 构造B
  9. BBBBB
  10. 析构B
  11. 析构A*/
  12. }

6.

  1. int main()
  2. {
  3. B b;
  4. okk(b);
  5.  
  6. /*构造A
  7. 构造B
  8. hahaha
  9. 析构A
  10. 析构B
  11. 析构A*/
  12. }

7.

  1. int main()
  2. {
  3. B *b = new B;
  4. A a;
  5. b = &a; //报错,不能让子类指针指向父对象
  6. ok(b);
  7. }

c++多态多实例的更多相关文章

  1. Java中,方法的重写、重载的区别,以及多态的实例

    首先我们要明白什么是重写和重载 重写(override):子类方法覆盖了父类的方法.    (类与类之间继承的关系) 例:父类代码 public class Deng { public void Qi ...

  2. polymorphic-associations 多态关联实例 ruby on rails

    这次做新项目的时候,把图片都放在了一个表里,其他表中不再存图片信息,通过多态关联建立表之间的关系. (1)新建picture表, component表不需要处理 class CreatePicture ...

  3. c++中一个多态的实例

    #include <iostream> #include <fstream> #include <vector> #include <algorithm> ...

  4. java多态抽象类实例

    编写一个Soldier类,描述具有普遍行为和属性的一个士兵对象. 编写陆军士兵.海军士兵.军官类来扩展Soldier类. 设计Soldier类的相关属性和方法. 建模几个陆军士兵.海军士兵.军官类来继 ...

  5. Java中多态的实例

    public class cf { /** * 实际上这里涉及方法调用的优先问题, * 优先级由高到低依次为:this.show(O).super.show(O).this.show((super)O ...

  6. 「OC」 多态

    一.基本概念 多态在代码中的体现,即为某一类事物的多种形态,OC对象具有多态性.必须要有继承,没有继承就没有多态. 在使用多态时,会进行动态检测,以调用真实的对象方法. 多态在代码中的体现即父类指针指 ...

  7. .NET本质论 实例

    对象和值的比较 CLR的类型系统(其实就是通用类型系统(CTS),它定义了如何在运行库中声明,使用和管理类型,同时也是运行库支持跨语言集成的一个重要组成部分)将对应简单值的类型同对应传统"对 ...

  8. Java基础十一--多态

    Java基础十一--多态 一.多态定义 简单说:就是一个对象对应着不同类型. 多态在代码中的体现: 父类或者接口的引用指向其子类的对象. /* 对象的多态性. class 动物 {} class 猫 ...

  9. 结合实例详解"pure Virtual function called"

    作者:阿波 链接:http://blog.csdn.net/livelylittlefish/article/details/9750593 (4年前的一篇文章,翻出来共享一下.) 本实例即为经典的讲 ...

随机推荐

  1. 什么是BFC?

    转载自知乎:https://zhuanlan.zhihu.com/p/25321647 一.常见定位方案 在讲 BFC 之前,我们先来了解一下常见的定位方案,定位方案是控制元素的布局,有三种常见方案: ...

  2. Educational Codeforces Round 21 Problem A - C

    Problem A Lucky Year 题目传送门[here] 题目大意是说,只有一个数字非零的数是幸运的,给出一个数,求下一个幸运的数是多少. 这个幸运的数不是最高位的数字都是零,于是只跟最高位有 ...

  3. Entity Framework 6 和 MVC5

    网站地址: Entity  Framework 6   http://msdn.microsoft.com/en-us/data/ef.aspx MVC5     http://www.asp.net ...

  4. Spring batch的学习

    Spring batch是用来处理大量数据操作的一个框架,主要用来读取大量数据,然后进行一定处理后输出成指定的形式. Spring batch主要有以下部分组成: JobRepository     ...

  5. C语言中生产随机数 rand()函数

    参考资料:C语言中产生随机数 一:如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间.RAND_MAX定义在stdl ...

  6. HDU 6070 Dirt Ratio(分数规划+线段树)

    http://acm.hdu.edu.cn/showproblem.php?pid=6070 题意: 找出一个区间,使得(区间内不同数的个数/区间长度)的值最小,并输出该值. 思路: 因为是要求$\f ...

  7. java入门书籍很少介绍的java知识

    1.java中数组的长度可以用.length来确定 2.java中的Arrays类可以对数组进行轻松的操作 (1).包名:import java.util.Arrays (2).Arrays.sort ...

  8. 一步一步实现JS拖拽插件

    js拖拽是常见的网页效果,本文将从零开始实现一个简单的js插件. 一.js拖拽插件的原理 常见的拖拽操作是什么样的呢?整过过程大概有下面几个步骤: 1.用鼠标点击被拖拽的元素 2.按住鼠标不放,移动鼠 ...

  9. Android JNI学习(四)——JNI的常用方法的中文API

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  10. 在ANE插件中启动AIR开发的Android应用

    在Android原生应用开发中,启动一个应用非常容易: Intent __intent = new Intent(this, YourAppActivity.class); startActivity ...