面向对象程序设计-C++ Inheritance & Multiple inheritance & RTTI【第十三次上课笔记】
Sadly, 这节课带过去的笔记本没电了 T^T
导致没有一行 Code, Sorry
笔记如下:
Shape * p1; //使用指针创建对象的方法
p = new Circle (2.0);
Shape * p2;
p = new Rectangle (3.0, 5.0); class Shape {
public:
virtual double area () = ; //Pure virtual function
} //Warning: 纯虚函数不能以内敛的形式进行定义,只能在类的外部定义 //如果,抽象基类中没有定义的虚函数,那么,在其派生类中定义也无法实现 //C++ 对象布局
//概念: 成员函数占的空间不在对象中,而在代码段中 EmptyClass es;
cout << sizeof (es); //输出为1,非空,即只存在es对象的地址 //1. C++ 给每个含有虚函数的类分配 virtual function table (Vtable)
//2. 给其每一个对象创建一个虚指针 //Override 覆盖: 基类中有虚函数,派生类中重新实现; 返回值类型也要一样
//Overload 重载
//Namebinding 隐藏: 派生类中定义了函数会把基类中所有同名函数隐藏
//恢复隐藏的方法 int x = d4.Base::f (); //实现间接访问被隐藏的虚函数,所谓的隐藏只是直接访问隐藏 //在构造函数,析构函数用虚函数,只会调用本类的实现
//在非静态成员函数中使用虚函数时,则会调用覆盖了的虚函数版本
//因为静态成员函数中无 this 指针 //RTTI : 运行时类型鉴别, 根据虚函数原理
Runtime Type indentification #include <typeinfo> //需要导入的头文件 typeid () //获取当前对象实际类型
typeid (br).name () //多重继承 class Dog : public Pet, public animal { }; //dynamic_case : 向下的类型转化 Dog * pd = dynamic_case <Dog *> (p); //1. 如果 p 的类型是 Dog * 类型,则 pd = p
//2. 否则,pd = NULL 为空 //只用于指针或引用,定义指针类中有虚函数,一定是多态类
面向对象程序设计-C++ Inheritance & Multiple inheritance & RTTI【第十三次上课笔记】的更多相关文章
- {key}面向对象程序设计-C++ polymorphism 【第十三次上课笔记】
Peronal Link: http://segmentfault.com/a/1190000002464822 这节课讲了本门课程 面向对象程序设计中最为重要的一个部分 - 多态 /******** ...
- 面向对象程序设计-C++ Type conversion (Static) & Inheritance & Composition【第十二次上课笔记】
这节课继续讲解了 static 作为静态数据成员 / 成员函数的用法 具体详解我都已注释出来了,大家可以慢慢看 有任何问题都可以在这篇文章下留言我会及时解答 :) //static 静态数据成员 // ...
- 2018面向对象程序设计(Java)第13周学习指导及要求
2018面向对象程序设计(Java)第13周学习指导及要求 (2018.11.22-2018.11.25) 学习目标 (1) 掌握事件处理的基本原理,理解其用途: (2) 掌握AWT事件模型的工作机 ...
- 面向对象程序设计(JAVA) 第13周学习指导及要求
2019面向对象程序设计(Java)第13周学习指导及要求 (2019.11.19-2019.11.25) 学习目标 (1) 掌握事件处理的基本原理,理解其用途: (2) 掌握AWT事件模型的工作 ...
- Python面向对象三要素-继承(Inheritance)
Python面向对象三要素-继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承概述 1>.基本概念 前面我们学习了Python的面向对象三 ...
- Multiple inheritance in Go
原文:http://golangtutorials.blogspot.com/2011/06/multiple-inheritance-in-go.html --------------------- ...
- 面向对象第二个特征-继承(Inheritance)
面向对象第二个特征-继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.java中的继承概述 1>.继承概述 多个类种存在相同属性和行为时,讲这 ...
- Multiple Inheritance in C++
Multiple Inheritance is a feature of C++ where a class can inherit from more than one classes. The c ...
- [.net 面向对象程序设计深入](2)UML——在Visual Studio 2013/2015中设计UML用例图
[.net 面向对象程序设计深入](2)UML——在Visual Studio 2013/2015中设计UML用例图 1.用例图简介 定义:用例图主要用来描述“用户.需求.系统功能单元”之间的关系. ...
随机推荐
- 转: 深入理解 AngularJS 的 Scope
查看 DEMO.参考 StackOverflow. ng-switch ng-switch 的原型继承和 ng-include 一样.所以如果你需要对基本类型数据进行双向绑定,使用 $parent ...
- java.lang.ClassCastException: oracle.sql.TIMESTAMP cannot be cast to java.sql.Timestamp
http://stackoverflow.com/questions/13269564/java-lang-classcastexception-oracle-sql-timestamp-cannot ...
- Protel99SE制作拼板的方法
制作步骤: 1.在PCB编辑里按快捷键 S/A全选复制源PCB全部内容,再按Ctrl+C看到十字光标.点击左键. 2.打开目标PCB文件,点击Edit菜单,在下拉菜单中点击Paste special( ...
- C#共享内存类改进版
原文 C#共享内存类改进版 改进说明及源码实例下载见:http://blog.csdn.net/zzh8845/archive/2008/11/22/3349963.aspx ShareMem.cs ...
- 最长回文(Manacher)
HOT~ 杭电2015级新生如何加入ACM集训队? 最长回文 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- Android中获取系统的时间
activity代码 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); set ...
- Cocos2d-x 3.0 使用TinyXml 解析XML文件
在cocos2d-x 3.0中Xml解析已经不用自己找库了,已经为我们集成好了. text.xml <!--?xml version ="1.0" encoding =&qu ...
- asp.net传值
asp.net页面传至几种方法 Response.Redirect (或称 Query String 方式.URL方式) Response.Redirect("WebForm5.aspx&q ...
- JSPatch技术文档
一.背景需求介绍 为什么我们需要一个热修复(hot-fix)技术? 工作中容易犯错.bug难以避免. 开发和测试人力有限. 苹果Appstore审核周期太长,一旦出现严重bug难以快速上线新版本. 作 ...
- BZOJ 1202: [HNOI2005]狡猾的商人( 差分约束 )
好像很多人用并查集写的... 前缀和, 则 sumt - sums-1 = v, 拆成2条 : sumt ≤ sums-1 + v, sums-1 ≤ sumt - v 就是一个差分约束, 建图跑SP ...