前两天通过父类指针调用子类虚函数时调用了一个父类未定义的方法,顺便找了下关于虚函数的资料。特此转存耗子哥的这篇博文。地址在这里以及关于C++对象内存布局的进阶篇上篇下篇
分类:
编程语言 时间:
2014-09-02 19:32:25
阅读次数:
174
函数原型:virtualBOOLPreTranslateMessage(MSG*pMsg)1、在MFC中,PreTranslateMessage是虚函数,是用来截获消息的。我们可以通过重载它来处理键盘和鼠标消息。在sdk中,这有所不同,我们必须在回调函数 LRESULTCALLBACKWndProc...
分类:
其他好文 时间:
2014-09-02 13:48:34
阅读次数:
146
虚函数表在继承层次中比较复杂,总结重要的几点如下:
1、虚函数指针一般在对象的开头或者结尾
2、虚函数表其实就是一个函数指针类型的数组
3、编译器如何知道虚函数表指针?答案是虚函数表的最后一个元素是NULL
4、当从多个基类派生时,派生类继承所有基类的虚函数指针
5、虚函数表是类级别的,类的所有对象共享同一个虚函数表
6、不同的类的对象有不同的虚函数表
7、在继承中,子类增加一个虚函...
分类:
编程语言 时间:
2014-08-30 21:48:50
阅读次数:
230
前言 本文将讲解一个新手 C++ 程序员经常会犯的错误 - 在构造/析构函数中使用虚函数,并分析错误原因所在以及规避方法。错误起因 首先,假设我们以一个实现交易的类为父类,然后一个实现买的类,一个实现卖的类为其子类。 这三个类的对象初始化过程中,都需要完成注册的这么一件事情 (函数)。然而,各...
分类:
其他好文 时间:
2014-08-30 11:13:29
阅读次数:
195
class文件中的access flag记录了一个类的相关信息,比如public abstract final等等。其中有一个值ACC_SUPER。现理解如下:
ACC_SUPER是用来表示如何调用父类的方法。在jdk1.1之前,jvm使用一种invokenonvirtual的指令,调用父类方法。这个方法就是现在的invokespecial 前身。既然连名字都改过了,他们的实现差距可以认为已经比较大了。invokenonvirtual是不会进行虚函数查找的,也就是总是静态绑定。...
分类:
编程语言 时间:
2014-08-27 18:53:28
阅读次数:
326
一个C++继承、虚函数和多态性的实例代码,用于说明父类、子类和虚函数的用法。...
分类:
编程语言 时间:
2014-08-27 18:41:58
阅读次数:
208
所谓重载指的是同一个类中有两个或多个名字相同但是参数不同的方法。重载,必然发生在一个类中,函数名相同,参数类型或者顺序不同构成重载,与返回类型无关。override:过载也称重写是指子类对父类中虚函数或抽象函数的“覆盖”(这也就是有些书将过载翻译为覆盖的原因),但是这种“覆盖”和用new关键字来覆盖...
分类:
其他好文 时间:
2014-08-27 16:05:37
阅读次数:
164
转载:http://blog.chinaunix.net/uid-25544300-id-3236826.html部分修改,感谢博主!在 某些类里声明纯虚析构函数很方便。纯虚函数将产生抽象类——不能实例化的类(即不能创建此类型的对象)。有些时候,你想使一个类成为抽象类,但刚好又没有 任何纯虚函数。怎...
分类:
其他好文 时间:
2014-08-27 15:57:47
阅读次数:
218
1.静态联编,是程序的匹配,连接在编译阶段实现,也称为早期匹配。重载函数使用静态联编。
2.动态联编是指程序联编推迟到运行时进行,所以又称为晚期联编。switch语句和if语句是动态联编的例子。
#include
void go(int num)
{
}
void go(char *str)
{
}
//class
//::在一个类中
class A
{
public:
voi...
分类:
其他好文 时间:
2014-08-27 14:48:28
阅读次数:
212
??
1.override,final的使用,两者都是针对虚函数,也就是说要有virtual关键字
#include
//C++中的final和override主要是针对虚函数
//加了final表示拒绝重写,这是为了使某些情况下,拒绝接口的重写
//override,声明重写父类的方法,前提是要有virtual关键字修饰函数。
//当父类没有接口...
分类:
其他好文 时间:
2014-08-27 14:46:28
阅读次数:
436