当前位置:首页 » 服务器技术
开发技术指南» 文章正文
    引言: 在构造函数中调用虚成员函数,虽然这是个不很常用的技术,但研究一下可以加深对虚函数机制及对象构造过程的理解。
 

 

 ·iis服务器组建攻略(1)    »显示摘要«
    摘要:iis(internet information server,互联网信息服务)是一种web(网页)服务组件,其中包括web服务器、ftp服务器、nntp服务器和smtp服务器,分别用于网页浏览、文件传输、新闻服务和邮件发送等方面,它使得在网络(包括互联网和局域网)上发布信息成了一件很容易的事。本文将向你讲述 windows 2000高级服务器版中自带的iis 5.0的配置和管理方......
 ·c++中的const限定修饰符    »显示摘要«
    摘要:const修饰符可以把对象转变成常数对象,意思就是说利用const进行修饰的变量的值在程序的任意位置将不能再被修改,就如同常数一样使用!使用方法是:const int a=1;//这里定义了一个int类型的const常数变量a; 但就于指针来说const仍然是起作用的,以下有两点要十分注意,因为下面的两个问题很容易混淆! 我们来看一个如下的例子:#include <iostream> ......


C++对象布局及多态之虚成员函数调用
在构造函数中调用虚成员函数,虽然这是个不很常用的技术,但研究一下可以加深对虚函数机制及对象构造过程的理解.这个问题也与一般直观上的认识有所差异.先看看下面的两个类定义.

{ 【程序编程相关:Visual C#的SQL Server

struct c180 【推荐阅读:Java GUI开发工具Netbeans

foo(); 【扩展信息:数据结构与算法(C#实现)系列---AV

 c180() {

this->foo();

 }

 virtual foo() {

cout << "<< c180.foo this: " << this << " vtadr: " << *(void**)this << endl;

 }

};

struct c190 : public c180

{

 c190() {}

 virtual foo() {

cout << "<< c190.foo this: " << this << " vtadr: " << *(void**)this << endl;

 }

};

父类中有一个虚函数,并且父类在它的构造函数中调用了这个虚函数,调用时它采用了两种方法一种是直接调用,一种是通过this指针调用.同时子类又重写了这个虚函数.

我们可以来预测一下如果构造一个c190的对象会发生什么情况.

我们知道,在构造一个对象时,首先会按对象的大小得到一块内存(在heap上或在stack上),然后会把指向这块内存的指针做为this指针来调用类的构造函数,对这块内存进行初始化.如果对象有父类就会先调用父类的构造函数(并依次递归),如果有多个父类(多重继承)会依次对父类的构造函数进行调用,并会适当的调整this指针的位置.在调用完所有的父类的构造函数后,再执行自己的代码.

照上面的分析构造c190时也会调用c180的构造函数,这时在c180构造函数中的第一个foo调用为静态绑定,会调用到c180::foo()函数.第二个foo调用是通过指针调用的,这时多态行为会发生,应该调用的是c190::foo()函数.执行如下代码:

c190 obj;

obj.foo();

结果为:

<< c180.foo this: 0012f7a4 vtadr: 0045c404

<< c180.foo this: 0012f7a4 vtadr: 0045c404

<< c190.foo this: 0012f7a4 vtadr: 0045c400

与我们的分析大相径庭.前2行是构造c190时的输出,后1行是我们用静态绑定方式调用的c190::foo()函数.第2行的输出说明多态行为并没有象预期的那样发生.
...   下一页
    摘要:一、 程序设计思路与实现首先要分析一下广告窗口的一般特性。广告窗口一般是通过主页面里的javascript脚本或vbscript 脚本语言来动态弹出的,其实质还是一个ie窗口。但绝大多数窗口在创建出来后是没有菜单,工具条等其它东西的,因此我们可以先搜寻ie窗口,然后判断其窗口是否有菜单和工具条等东西,如果没有就认为是广告窗口了,虽然这样的判断不是十分的严格,但从实际使用情况来看虽然有时会误关一些正......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE