前导 在上面的博文中描述了基类中存在虚函数时,基类和派生类中虚函数表的结构。 在派生类也定义了虚函数时,函数表又是怎样的结构呢? 先看下面的示例代码: class A 和 class B 都有一个虚函数,然后 class C 继承 A 和 B。在VS2010中,查看变量: 如图所示,局部变量中只显示 ...
分类:
编程语言 时间:
2016-11-22 16:53:31
阅读次数:
141
先后打印出两行:A is constructed. B is constructed. 调用B的构造函数时,先会调用B的基类及A的构造函数。然后在A的构造函数里调用Print。由于此时实例的类型B的部分还没有构造好,本质上它只是A的一个实例,他的虚函数表指针指向的是类型A的虚函数表。因此此时调用的P ...
分类:
其他好文 时间:
2016-11-21 22:49:38
阅读次数:
159
1.类与类之间的关系:依赖,实现,泛化(继承),关联,组合,聚合。 1)依赖(虚线):一个类是 另一个类的函数参数 或者 函数返回值。 2)实现(实线加小圆):对纯虚函数类(抽象类)的实现。 3)继承 即 泛化(实线加空心三角形,从子类指向父类):表示一个类与另一个类之间的继承关系; 4)关联(实线 ...
分类:
其他好文 时间:
2016-11-20 18:12:49
阅读次数:
617
http://glgjing.github.io/blog/2015/01/03/c-plus-plus-xu-han-shu-qian-xi/ C++虚函数浅析 JAN 3RD, 2015 1:59 AM | COMMENTS 一 引言 C++面向对象语言的一大特性就是抽象,在程序设计上的体现就是 ...
分类:
编程语言 时间:
2016-11-20 13:32:29
阅读次数:
219
C++中四种类型转换符的总结 一、reinterpret_cast用法:reinpreter_cast<type-id> (expression) reinterpret_cast操作符修改了操作数类型,但仅仅是重新解释了给出的对象的比特模型而没有进行二进制转换,即二进制值没有变。例如: int n ...
分类:
编程语言 时间:
2016-11-20 13:15:26
阅读次数:
161
使用一个基类指针删除派生类对象,同时基类的析构函数是非虚的,那么这个指针只会删除派生类对象中的基类的部分,其派生部分不会被删除。造成资源泄漏。而如果一个类并不用作基类,则没必要把析构函数声明为虚的,否则会浪费空间来存储虚函数指针和虚函数表。STL容器并不含虚析构函数,因此最好不要继承STL容器。只要... ...
分类:
其他好文 时间:
2016-11-19 15:41:35
阅读次数:
178
1. 对齐原则。比如64位总线,每次寻址读取8B。编程时注意变量地址,尽量消耗总线最少的寻址次数。堆内存申请时,系统严格按照对齐原则分配,故而使用时候也尽量不要跨寻址边界。 2. 需要的时候,可为了效率拷贝代码,虽然增加了代码体积,但这是值得的。尤其是for循环,若次数比较少,拆开亦无妨。 3. 位 ...
分类:
编程语言 时间:
2016-11-18 17:55:28
阅读次数:
176
C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数 1:用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。 2: ...
分类:
编程语言 时间:
2016-11-17 20:10:14
阅读次数:
280
为类重载<<与>>这两个运算符时,重载函数必须为该类的友元函数。 当友元不能被继承,故不能当作虚函数,无法使用多态。 可以用以下结构实现友元与虚函数的组合。 1 class base { 2 public: 3 friend ostream & operator << (ostream &o, co ...
分类:
编程语言 时间:
2016-11-17 19:24:48
阅读次数:
228
当然不一定要把所有的析构函数都设置成虚函数,因为会增加空间消耗。 ...
分类:
其他好文 时间:
2016-11-14 12:51:50
阅读次数:
202