我们知道C++程序编译好以后大致分为:代码区、数据区,比如说类的函数体就被放在代码区,每一个类的实例则被放在数据区。
假设有下面的类的结构:
- #include <stdio.h>
- class Base {
- public:
- void foo() {
- printf("Base::foo()./n");
- }
- };
- class Derive : Base {
- public:
- void bar() {
- printf("Derive::bar()./n");
- }
- };
- int main()
- {
- Base b;
- b.foo();
- Derive d1;
- d1.foo();
- d1.bar();
- return 0;
- }
当编译器在编译的时候,将以上类的函数代码放在代码区,main函数里的三个函数执行语句,在编译好之后就变成了代码区的偏移地址,而且这个偏移地址能够在编译的时候唯一确定。虽然在这个例子中用到了类和对象,但实际上执行的时候和执行一个普通函数没区别。