栗子現場直播 千篇一栗
有很多簡單的道理,若不是被遺忘,不是察覺不到,就是知易行難。

2009年10月29日 星期四

C++ virtual

#include <iostream>
using namespace std;

class A{
int a;
void b();
};

class B{
int a;
virtual void b();
};

int main(){
cout<<"sizeof(A)="<<sizeof(A)<<endl;
cout<<"sizeof(B)="<<sizeof(B)<<endl;
return 0;
}

Output (Ubuntu8.04 gcc4.2.4):
sizeof(A)=4
sizeof(B)=8

  這個小小的現象,關乎到 memset/memcpy 的運用,亦關乎到 base class pointer 呼叫 function 的機制。很多大學都不會教你這個道理,亦有很多在職的程式編寫員不知道是甚麼一回事。學習 C 語言的 function pointer 部份,對於理解這個現象有一定幫助。

沒有留言: