c++多态多实例
- #include <bits/stdc++.h>
- using namespace std;
- class A
- {
- public:
- A()
- {
- cout << "构造A" << endl;
- s = new char[];
- memset(s, , );
- strcpy(s, "hahaha");
- }
- virtual ~A()
- {
- cout << "析构A" << endl;
- delete []s;
- }
- virtual void print()
- {
- cout << s << endl;
- }
- private:
- char *s;
- };
- class B : public A
- {
- public:
- B()
- {
- cout << "构造B" << endl;
- s = new char[];
- memset(s, , );
- strcpy(s, "BBBBB");
- }
- virtual ~B()
- {
- cout << "析构B" << endl;
- delete []s;
- }
- virtual void print()
- {
- cout << s << endl;
- }
- private:
- char *s;
- };
- void ok(A *obj)
- {
- obj->print();
- }
- void okk(A obj)
- {
- obj.print();
- }
1.
- int main()
- {
- B *b = new B;
- A *obj = b;
- obj->print();
- delete b;
- /*构造A
- 构造B
- BBBBB
- 析构B
- 析构A*/
- }
2.
- int main()
- {
- B *b = new B;
- A *obj = b;
- obj->print();
- delete obj;
- /*构造A
- 构造B
- BBBBB
- 析构A*/
- }
3.
- int main()
- {
- B b;
- A a = b;
- A *pa = &b;
- a.print();//这里的a就是一个A类型的变量,它的内存布局在赋值的时候已经从B转换到A了,多于的数据都被丢弃,因此其就是一个A类型的变量。
- pa->print();//其是一个指针,其类型虽然是A,但指向的区域的内容却是一个B类型的内存结构,虽然内存结果的布局与A兼容,但其虚函数表中的Test却是B的实现
- /*构造A
- 构造B
- hahaha
- BBBBB
- 析构A
- 析构B
- 析构A*/
- }
4.
- int main()
- {
- B *b = new B;
- ok(b);
- /*构造A
- 构造B
- BBBBB*/
- }
5.
- int main()
- {
- B *b = new B;
- ok(b);
- delete b;
- /*构造A
- 构造B
- BBBBB
- 析构B
- 析构A*/
- }
6.
- int main()
- {
- B b;
- okk(b);
- /*构造A
- 构造B
- hahaha
- 析构A
- 析构B
- 析构A*/
- }
7.
- int main()
- {
- B *b = new B;
- A a;
- b = &a; //报错,不能让子类指针指向父对象
- ok(b);
- }
c++多态多实例的更多相关文章
- Java中,方法的重写、重载的区别,以及多态的实例
首先我们要明白什么是重写和重载 重写(override):子类方法覆盖了父类的方法. (类与类之间继承的关系) 例:父类代码 public class Deng { public void Qi ...
- polymorphic-associations 多态关联实例 ruby on rails
这次做新项目的时候,把图片都放在了一个表里,其他表中不再存图片信息,通过多态关联建立表之间的关系. (1)新建picture表, component表不需要处理 class CreatePicture ...
- c++中一个多态的实例
#include <iostream> #include <fstream> #include <vector> #include <algorithm> ...
- java多态抽象类实例
编写一个Soldier类,描述具有普遍行为和属性的一个士兵对象. 编写陆军士兵.海军士兵.军官类来扩展Soldier类. 设计Soldier类的相关属性和方法. 建模几个陆军士兵.海军士兵.军官类来继 ...
- Java中多态的实例
public class cf { /** * 实际上这里涉及方法调用的优先问题, * 优先级由高到低依次为:this.show(O).super.show(O).this.show((super)O ...
- 「OC」 多态
一.基本概念 多态在代码中的体现,即为某一类事物的多种形态,OC对象具有多态性.必须要有继承,没有继承就没有多态. 在使用多态时,会进行动态检测,以调用真实的对象方法. 多态在代码中的体现即父类指针指 ...
- .NET本质论 实例
对象和值的比较 CLR的类型系统(其实就是通用类型系统(CTS),它定义了如何在运行库中声明,使用和管理类型,同时也是运行库支持跨语言集成的一个重要组成部分)将对应简单值的类型同对应传统"对 ...
- Java基础十一--多态
Java基础十一--多态 一.多态定义 简单说:就是一个对象对应着不同类型. 多态在代码中的体现: 父类或者接口的引用指向其子类的对象. /* 对象的多态性. class 动物 {} class 猫 ...
- 结合实例详解"pure Virtual function called"
作者:阿波 链接:http://blog.csdn.net/livelylittlefish/article/details/9750593 (4年前的一篇文章,翻出来共享一下.) 本实例即为经典的讲 ...
随机推荐
- 什么是BFC?
转载自知乎:https://zhuanlan.zhihu.com/p/25321647 一.常见定位方案 在讲 BFC 之前,我们先来了解一下常见的定位方案,定位方案是控制元素的布局,有三种常见方案: ...
- Educational Codeforces Round 21 Problem A - C
Problem A Lucky Year 题目传送门[here] 题目大意是说,只有一个数字非零的数是幸运的,给出一个数,求下一个幸运的数是多少. 这个幸运的数不是最高位的数字都是零,于是只跟最高位有 ...
- Entity Framework 6 和 MVC5
网站地址: Entity Framework 6 http://msdn.microsoft.com/en-us/data/ef.aspx MVC5 http://www.asp.net ...
- Spring batch的学习
Spring batch是用来处理大量数据操作的一个框架,主要用来读取大量数据,然后进行一定处理后输出成指定的形式. Spring batch主要有以下部分组成: JobRepository ...
- C语言中生产随机数 rand()函数
参考资料:C语言中产生随机数 一:如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间.RAND_MAX定义在stdl ...
- HDU 6070 Dirt Ratio(分数规划+线段树)
http://acm.hdu.edu.cn/showproblem.php?pid=6070 题意: 找出一个区间,使得(区间内不同数的个数/区间长度)的值最小,并输出该值. 思路: 因为是要求$\f ...
- java入门书籍很少介绍的java知识
1.java中数组的长度可以用.length来确定 2.java中的Arrays类可以对数组进行轻松的操作 (1).包名:import java.util.Arrays (2).Arrays.sort ...
- 一步一步实现JS拖拽插件
js拖拽是常见的网页效果,本文将从零开始实现一个简单的js插件. 一.js拖拽插件的原理 常见的拖拽操作是什么样的呢?整过过程大概有下面几个步骤: 1.用鼠标点击被拖拽的元素 2.按住鼠标不放,移动鼠 ...
- Android JNI学习(四)——JNI的常用方法的中文API
本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...
- 在ANE插件中启动AIR开发的Android应用
在Android原生应用开发中,启动一个应用非常容易: Intent __intent = new Intent(this, YourAppActivity.class); startActivity ...