vf19.c

来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 59 行

C
59
字号
#include "fail.h"

char called;

struct A {
    virtual void opn () const = 0;
};

struct B : public virtual A {
    virtual void opn () const;
};

void B::opn() const {
    called = 'B';
}

struct D1 : public virtual B {
    virtual void opn () const;
};

void D1::opn() const {
    called = 'D';
}

struct D2 : public virtual B {
};

struct E : public virtual D1, public virtual D2 {
    E();
};

E:: E(){
}

int main () {
    E v1;
    
    A *pA = &v1;
    pA->opn();
#if __WATCOM_REVISION__ >= 8
    if( called != 'D' ) _fail;
#else
    if( called != 'B' ) _fail;
#endif
    B *pB = &v1;
    pB->opn();
    if( called != 'D' ) _fail;
    D1 *pD1 = &v1;
    pD1->opn();
    if( called != 'D' ) _fail;
    D2 *pD2 = &v1;
    pD2->opn();
    if( called != 'D' ) _fail;
    E *pE = &v1;
    pE->opn();
    if( called != 'D' ) _fail;
    _PASS;
}

⌨️ 快捷键说明

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