摘要:
用Notepad++创建一个文本文件text.txt,其默认编码格式为ANSI(乍看之下,还以为是ASCII呢),输入汉字居然不是乱码: 保存为test.txt,发送给你美国的同事Bob。他也用Notepad++,不幸的是,却发现你的文件内容是这样的: 也许你会认为:你用的是中文系统,能正常显示中文 阅读全文
摘要:
1. 虚表与“虚函数表” 在“C/C++杂记:虚函数的实现的基本原理”一文中曾提到“虚函数表”的概念,只是为了便于理解,事实是:虚函数表并不真的独立存在,它只是虚表(virtual table)中的一部分内容。例: 从图中可已看出,虚表除了包含虚函数指针,还包含其它一些信息(如:RTTI信息、偏移值 阅读全文
摘要:
运行时类型识别(RTTI)的引入有三个作用: 配合typeid操作符的实现; 实现异常处理中catch的匹配过程; 实现动态类型转换dynamic_cast。 1. typeid操作符的实现 1.1. 静态类型的情形 C++中支持使用typeid关键字获取对象类型信息,它的返回值类型是const s 阅读全文
摘要:
1. 数据成员指针 对于普通指针变量来说,其值是它所指向的地址,0表示空指针。 而对于数据成员指针变量来说,其值是数据成员所在地址相对于对象起始地址的偏移值,空指针用-1表示。例: 代码示例: struct X { int a; int b; }; #define VALUE_OF_PTR(p) ( 阅读全文
摘要:
1. 概述 简单地说,每一个含有虚函数(无论是其本身的,还是继承而来的)的类都至少有一个与之对应的虚函数表,其中存放着该类所有的虚函数对应的函数指针。例: 其中: B的虚函数表中存放着B::foo和B::bar两个函数指针。 D的虚函数表中存放的既有继承自B的虚函数B::foo,又有重写(overr 阅读全文
摘要:
单继承:只有一个基类和一个派生类 class Base { public: virtual void fun1() { cout << "Base::func1()" << endl; } virtual void fun2() { cout << "Base::func2()" << endl; 阅读全文
摘要:
本文关键词:C++ 多态 多继承 多重继承 虚函数表 虚函数指针 动态绑定 概述:C++相对其他面向对象语言来说,之所以灵活、高效。很大程度的占比在于其多态技术和模板技术。C++虚函数表是支撑C++多态的重要技术,它是C++动态绑定技术的核心。 本文章将着重图解虚函数表相关知识,在阅读本文前,博主已 阅读全文
摘要:
无继承时: 1、分配内存 2、初始化列表之前赋值虚表指针 3、列表初始化 4、执行构造函数体 有继承时: 1、分配内存 2、基类构造过程(按照无继承来) 3、初始化子类虚表指针 4、子类列表初始化 5、执行子类构造函数体 Q:虚表指针在初始化列表之前被赋值,可以放在初始化列表之后赋值吗?即顺序是:列 阅读全文
摘要:
一、概述 为了实现C++的多态,C++使用了一种动态绑定的技术。这个技术的核心是虚函数表(下文简称虚表)。本文介绍虚函数表是如何实现动态绑定的。 二、类的虚表 每个包含了虚函数的类都包含一个虚表。 我们知道,当一个类(A)继承另一个类(B)时,类A会继承类B的函数的调用权。所以如果一个基类包含了虚函 阅读全文