2025年12月13日 星期六

C++ virtual function 的另類呼叫法

大約16年前(2010)某天早上學習了一下 C++ 對於 virtual function 是怎麼做的, 就寫了一個小程式來驗證一下, 果然如預期的, 程式如下:

#include <iostream>

typedef void (*pfn_t) (void *);

class CObject
{
char *m_pszStr;

virtual void vfunc()
{
m_pszStr = "Slash is the BEST!\n";
std::cout << m_pszStr;
}
};

main()
{
CObject a;
pfn_t **p;

p = (pfn_t **) & a;
(**p) (&a);
}

執行結果:

[slash@slash ~]$ g++ a.cpp
[slash@slash ~]$ ./a.out
Slash is the BEST!
[slash@slash ~]$

沒有留言: