LockableObject类
#include
//除了构造函数,其它成员函数都声明为虚函数
class LockableObject{
public:
LockableObject(){}
virtual ~LockableObject(){}
virtual void Lock() = 0;
virtual void Unlock() = 0;
private:
CRIT...
分类:
其他好文 时间:
2015-07-28 16:05:46
阅读次数:
121
总结1:不管是重写还是覆盖都不会影响父类自身的功能(废话,肯定的嘛,除非代码被改)。2:当用子类创建父类的时候,如 C1c3=newC2(),重写会改变父类的功能,即调用子类的功能;而覆盖不会,仍然调用父类功能。3:虚方法、实方法都可以被覆盖(new),抽象方法,接口 不可以。4:抽象方法,接口,标...
面向对象程序设计中的多态性是指向不同的对象发送同一个消息,不同对象对应同一消息产生不同行为。在程序中消息就是调用
函数,不同的行为就是指不同的实现方法,即执行不同的函数体。也可以这样说就是实现了“一个接口,多种方法”。
从实现的角度来讲,多态可以分为两类:编译时的多态性和运行时的多态性。前者是通过静态联编来实现的,比如C++中通过函
数的重载和运算符的重载。后者则是通过动态联编来...
分类:
编程语言 时间:
2015-07-27 23:14:26
阅读次数:
322
无论是在编译还是在运行时,c++都支持多态性。编译时的多态是通过重载函数和运算符实现的,而编译时的多态则是通过使用继承和虚函数实现的。虚函数:是一个成员函数,该函数在基类声明,在派生类中重新定义。再基类中将成员函数声明前加关键字virtual,当继承包含虚函数的类时,派生类将重新定义虚函数。虚函数实...
分类:
其他好文 时间:
2015-07-27 22:37:19
阅读次数:
125
C++中虚函数的实现机制主要是VTable和虚指针。详细如下:
class A {
public:
virtual void f1();
virtual void f2();
private:
int a;
}
class B {
public:
void f1();
private:
int b;
}
如上A,B两个类,编译器为A类准备了一个虚...
分类:
编程语言 时间:
2015-07-27 19:05:27
阅读次数:
152
虚函数表是在什么时期建立的? 最近参加阿里巴巴公司的内推,面试官问了“虚函数表是在什么时期建立的?”。因为以前对虚函数表的理解不够多,所以就根据程序构建(Build)的四个过程(预编译、编译、汇编和链接),推导出虚函数表应该是在编译器确定的,原因如下: 1)预编译器主要处理那些源代码文件中的以“.....
分类:
编程语言 时间:
2015-07-27 00:07:31
阅读次数:
1123
最近又开始写项目服务器部分了, 再次接触了C++ 有了一些更深入的体会。记录一下,以免忘记~ 之前学习C++ 差不错都是靠死记, 记住C++的用法,C++的特性,然后去使用。没有从根本上理解,导致 几年不用C++,就已经完全忘记,然后又要花好长时间去记忆,使用。所以要真正做到学会C++,必须要从根本上了解,这样才不至于有会忘记, 而且使用起来会更的心应手。
1、明确了一些定义
关于指...
分类:
编程语言 时间:
2015-07-26 17:26:12
阅读次数:
135
很多教材上都有介绍到虚指针、虚函数与虚函数表,有的说类对象共享一个虚函数表,有的说,一个类对象拥有一个虚函数表;还有的说,无论用户声明了多少个类对象,但是,这个VTABLE虚函数表只有一个;也有的在说,每个具有虚函数的类的对象里面都有一个VPTR虚函数指针,这个指针指向VTABLE的首地址,每个类的对象都有这么一种指针。今天,我们就来解决这个问题,同一个类的不同对象,是不是拥有“相同”的虚函数表,这个相同是物理上的相同(内存地址)还是逻辑上的相同(数据结构)。本文现详述如下!...
分类:
编程语言 时间:
2015-07-26 17:24:57
阅读次数:
148
一般VC和BCB是将vPtr放在类实例的前四个字节,GCC是放在末尾。在某些情况下需要考虑表指针的位置,比如序列化的时候。其实只需将类实例的首地址与类的第一个成员变量地址相比较就可得知虚表指针的位置。class A{ A(void){} virtual void Foo(void...
分类:
其他好文 时间:
2015-07-26 17:08:16
阅读次数:
167
1、构造函数能不能是虚函数: 1.1从存储空间角度虚函数对应一个vtable,这大家都知道,可是这个vtable其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过 vtable来调用,可是对象还没有实例化,也就是内存空间还没有,怎么找vtable呢?所以构造函数不能是虚函数。1...
分类:
其他好文 时间:
2015-07-26 15:33:28
阅读次数:
125