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

ATL布幔之下的秘密(2)

 2006-07-22 22:55:03 来源:WEB开发网   
核心提示:介绍在本系列的教程中,我要讨论一些ATL的内部工作方式以及它所使用的技术,ATL布幔之下的秘密(2),这是本系列的第二篇文章,现在让我们来探究一些虚函数背后更加有趣的资料,我将会把这些构造函数之中的指针值打印出来,为了简便起见,为了和上文保持一致,在本文的讨论中我将使用相同的顺序

介绍

在本系列的教程中,我要讨论一些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;
}
程序的输出为:ase::fun这个程序表明,我们不能在基类的构造函数中调用派生类的虚函数。好了,那就让我们来看看着布幔之下到底做了什么。我将会把这些构造函数之中的指针值打印出来,为了简便起见,我移除了类中其它的函数。

1 2 3 4 5 6  下一页

Tags:ATL 之下 秘密

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