1.构造函数和析构函数里不应调用虚函数虚函数的多态是通过虚表和虚指针实现。虚表和虚指针是在基类和派生类初始化时逐层完善和建立。每个对象均有自己的虚表和虚指针。所以在基类构造函数里的虚表和虚指针是不完善的,调用虚函数会产生意外的结果。虚函数实现了晚绑定,析构是从最外层(晚派生)向最里层(早派生)进行析...
分类:
其他好文 时间:
2015-07-25 07:07:03
阅读次数:
140
C++对象模型中加入多继承从单继承可以知道,派生类中只是扩充了基类的虚函数表。如果是多继承的话,又是如何扩充的?1)每个基类都有自己的虚表。2)子类的成员函数被放到了第一个基类的表中。3)内存布局中,其父类布局依次按声明顺序排列。4)每个基类的虚表中的print()函数都被overwrite成了子类...
分类:
编程语言 时间:
2015-07-24 16:06:01
阅读次数:
142
1.定义视图是从一个或多个基本表(或视图)中导出的表,是一张虚表。2.概念?视图是查看数据库表中数据的一种方法;?视图提供了存储预定义的查询语句作为数据库中的对象以备以后使用的能力;?视图只是一种逻辑对象,并不是物理对象,因为视图不占物理存储空间;?在视图中被查询的表称为视图的基表;?视图的内容包括...
分类:
数据库 时间:
2015-07-23 13:36:37
阅读次数:
189
一、视图视图是从一个或多个表或视图中导出的表,其结构和数据是建立在对表的查询基础上的。所以试图不是真实存在的基础表,而是一张虚表视图,所对应的数据并不实际的视图结构存储在数据库中,而是存储在视图所引用的表中。通过视图看到的数据只是存放在基本表中的数据。创建视图:create view 视图名 ...
分类:
数据库 时间:
2015-07-22 22:10:53
阅读次数:
174
#include
using namespace std;class Base
{
public:
virtual void fun1()
{
cout << "Base::fun1()" << endl;
}
virtual void fun2()
{
cout << "Base::fun2()" <<...
分类:
编程语言 时间:
2015-07-11 15:10:23
阅读次数:
145
in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。notexists:做NL,对子查询先查,有个虚表,有确定值,所以就算子查询有NULL最终也有值返回notin:做hash,对子查询表建立内存数组,用外表匹配,那子查询要是有NULL那外表没的匹...
分类:
数据库 时间:
2015-07-10 11:06:15
阅读次数:
144
1.FROM 对FROM的左边的表和右边的表计算笛卡尔积。产生虚表VT1 2.ON 对虚表VT1进行ON筛选,只有那些符合的行才会被记录在虚表VT2中。 3.JOIN 如果指定了OUTER JOIN(比如left join、 right join),那么保留表中未匹配的行就会作为外部行添加到虚拟表V...
分类:
数据库 时间:
2015-07-07 21:12:53
阅读次数:
123
与C++中的构造函数相同,复制构造函数在对象生成过程中同样进行插入对应的Vtable虚表,但在成员变量赋值时,除具有复制构造函数的成员对象外,编译器合成复制构造函数其余均采用”Bitwise copy semantics(位逐次拷贝)”语义实现对象成员的拷贝,无论处于何种语境。测试代码如下:#inc...
分类:
编程语言 时间:
2015-07-06 13:56:39
阅读次数:
194
虚函数相关问题探索本篇文章中对虚函数做五个方面的探索。
1) 虚函数单一继承对象模型。
2) 虚表指针与虚表的创建释放时机。
3) 析构函数设置为虚函数。
4) 构造函数调用虚函数。
5) 析构函数调用虚函数。1. 虚函数单一继承对象模型
参见网址:http://www.cnblogs.com/taoxu0903/archive/2008/02/04/1064234.ht...
分类:
其他好文 时间:
2015-06-30 18:21:03
阅读次数:
131
环境: windows xp 3 VC2008如果类A拥有虚函数,而类B普通继承自类A,那么一个类B的对象在内存布局里:类B的虚表会将类A虚表合并覆盖,然后先排列类A的数据,再排列类B的数据如果类B虚拟继承自类A,那么一个类B的对象在内存布局里:类B的虚表和内容都不会将类A的合并,在类B的虚表之后插...
分类:
其他好文 时间:
2015-06-27 11:16:26
阅读次数:
121