virt5.c

来自「this is a gcc file, you can download it 」· C语言 代码 · 共 54 行

C
54
字号
// Ensure that virtual base upcast and downcasting works on this// conversions during virtual function dispatch at ctor/dtor time// when dynamic vtable fixups for deltas are needed.int fail = 0;struct BASE1 {  virtual ~BASE1 () { }      };   class MID;class BASE2 {public:   virtual MID *VFN (){ return 0; }};   class MIBASE : public BASE1, public BASE2 { };   class VBB : public MIBASE {public:  virtual long get_STATE () const = 0;  void print_STATE() { if (get_STATE () != 87654321) fail = 1; }};   class VBD : public virtual VBB {  long STATE;public:  long get_STATE() const { return STATE; }  VBD() { STATE = 87654321; }  ~VBD() { STATE = 87654321; }};   class MID : public virtual VBD {public:  MID () { print_STATE(); }  ~MID () { print_STATE(); }  virtual MID *VFN() { return this; }};  class LAST : public MID {public:  LAST () { print_STATE(); }  ~LAST () { print_STATE(); }};int main() {  MIBASE *o = new LAST;  MID *p = o->VFN();  p->print_STATE();  delete o;  return fail;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?