WEB开发网
开发学院软件开发VC ATL布幔之下的秘密 阅读

ATL布幔之下的秘密

 2006-07-22 22:55:08 来源:WEB开发网   
核心提示: 程序13. #include <iostream>using namespace std;class Class {virtual void f() { cout << "Class::f" << endl; }virtual voi

程序13. #include <iostream>
using namespace std;
class Class {
 virtual void f() { cout << "Class::f" << endl; }
 virtual void g() { cout << "Class::g" << endl; }
};
typedef void(*Fun)(void);
int main() {
 Class objClass;
 Fun pFun = NULL;
 // 调用第一个虚函数
 pFun = (Fun)*((int*)*(int*)(&objClass+0)+0);
 pFun();
 // 调用第二个虚函数
 pFun = (Fun)*((int*)*(int*)(&objClass+0)+1);
 pFun();
 return 0;
}
程序的输出为:Class::f
Class::g
现在我们来看看多重继承的情况。先看一个多重继承最简单的情况:

程序14. #include <iostream>
using namespace std;
class Base1 {
public:
 virtual void f() { }
};
class Base2 {
public:
 virtual void f() { }
};
class Base3 {
public:
 virtual void f() { }
};
class Drive : public Base1, public Base2, public Base3 {
};
int main() {
 Drive objDrive;
 cout << "Size is = " << sizeof(objDrive) << endl;
 return 0;
}
程序的输出为:Size is = 12这个程序示范了当你从多个基类继承一个类的时候,这个派生类就会拥有所有基类的虚函数表指针。

上一页  3 4 5 6 7 8 9 10  下一页

Tags:ATL 之下 秘密

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接