当前位置:首页 » 编程博文
开发技术指南» 文章正文
    引言: 原作者:ZeeshanAmjad原文链接:http://www.codeproject.com/atl/atl_underthehood_2.asp介绍 在本系列的教程中,我要讨论一些ATL的内部工作方式以及它所使用的技术,这是本系列的第二篇文章。
 

 

 ·多线程设计要点    »显示摘要«
    摘要:1.多线程中有主内存和工作内存之分, 在jvm中,有一个主内存,专门负责所有线程共享数据;而每个线程都有他自己私有的工作内存, 主内存和工作内存分贝在jvm的stack区和heap区。2.线程的状态有´ready´, ´running´, ´sleeping´, ´blocked´, 和 ´......
 ·简单介绍javabean 和 ejb 的区别    »显示摘要«
    摘要:现在可能已在使用 javabean,但还不了解它。如果有支持 java 的浏览器,那么,在桌面上使用 javabean 就没有限制。使用的 web 页面可以将 bean 作为小应用程序的一部分。您很快就会和作为浏览器可视部分的 javabean 交互,然后,那些 javabean 将与服务器上的 ejb 接口。这种能力也可以扩展到因特网和内部网。javabean 和 server bean(通常称......


ATL布幔之下的秘密(2)

原作者:zeeshan amjad原文链接:http://www.codeproject.com/atl/atl_underthehood_2.asp介绍  在本系列的教程中,我要讨论一些atl的内部工作方式以及它所使用的技术,这是本系列的第二篇文章.  现在让我们来探究一些虚函数背后更加有趣的资料.为了与上文保持一致,在本文的讨论中我将使用相同的顺序,程序的序号从20开始.  让我们看看下面这个程序:程序20.#include <iostream>using namespace std;class base {public:    virtual void fun() {        cout << "base::fun" << endl;    }    void show() {        fun();    }};class drive : public base {public:    virtual void fun() {        cout << "drive::fun" << endl;    }};int main() {    drive d;    d.show();    return 0;}  程序的输出为:drive::fun  这个程序清楚地示范了基类的函数是如何调用派生类的虚函数的.这一技术被用于不同的框架中,例如mfc与设计模式(比如template design pattern).现在你可以修改一下这个程序来看看它的行为,我将要在基类的构造函数中调用虚函数,而不是普通的成员函数.程序21.#include <iostream>using namespace std;class base {public:    base() {        fun();    }    virtual void fun() {        cout << "base::fun" << endl;    }};class drive : public base {public:    virtual void fun() {        cout << "drive::fun" << endl;    }};int main() {    drive d;    return 0;}  程序的输出为:base::fun  这个程序表明,我们不能在基类的构造函数中调用派生类的虚函数.好了,那就让我们来看看着布幔之下到底做了什么.我将会把这些构造函数之中的指针值打印出来,为了简便起见,我移除了类中其它的函数.程序22.#include <iostream>using namespace std;class base {public:    base() {        cout << "in base" << endl;        cout << "this pointer = " << (int*)this << endl;        cout << endl;    }virtual void f() { cout << "base::f" << endl; }};class drive : public base {public:    drive() {        cout << "in drive" << endl;        cout << "this pointer = " << (int*)this << endl;        cout << endl;    }virtual void f() { cout << "drive::f" << endl; }};int main() {    drive d;    cout << "in main" << endl;    cout << (int*)&d << endl;    return 0;}  程序的输出为:in basethis pointer = 0012ff7cin drivethis pointer = 0012ff7cin main0012ff7c  这就表示,整个内存位置中,只有一个对象的存在.那么就让我们把这个指针指向的值打印出来,也就是虚函数表的指针vptr指向的值,vtable的地址.
...   下一页

 ·类的设计方法    »显示摘要«
    摘要:1) 类名首字母应该大写。字段、方法以及对象(句柄)的首字母应小写。对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母。例如: thisisaclassname thisismethodorfieldname 若在定义中出现了常数初始化字符,则大写static final基本类型标识符中的所有字母。这样便可标志出它们属于编译期的常数。 java包(package)属于一种特......
» 本期热门文章:

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