ref13.c

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

C
95
字号
#include "fail.h"
// TESTREF2.C -- TEST REFERENCES USING PARAMETER PASSING TO INITIALIZE
//
// 91/11/06     -- Ian McHardy          -- defined

static int static_int;          // static integer for 5.2.2

int & return_int_ref()
{
    return static_int;
}

class BASE
{
    public:
    int a;
};

class INHERIT: public BASE
{
    public:
    int b;
};

INHERIT i;                  // - inherit structure 

void init_inherit(              // INITIALIZE a, b OF OBJECT to 1, 1
    INHERIT *object )           // - ptr to objec to initialize
{
    object->a = 1;
    object->b = 1;
}

void fbr(                       // FUNCTION WITH REF TO BASE PARAMETER
    BASE& br )
{
    br.a = -br.a;
}

void fir(                       // FUNCTION WITH REF TO INHERIT PARAMETER
    INHERIT& ir )
{
    ir.a = -ir.a;
    ir.b = -ir.b;
}

void test(
    INHERIT *ip,                // - pointer to INHERIT structure
    BASE& br,                   // - reference to BASE of INHERIT structure
    INHERIT& ir )               // - reference to INHERITE structure
{
    BASE *bp;

// 4.7
    init_inherit( ip );
    if( ip->b != 1 ) fail(__LINE__);
    fir( ir );
    if( ip->a != -1 ) fail(__LINE__);
    if( ip->b != -1 ) fail(__LINE__);
    init_inherit( ip );
    fbr( br );
    if( ip->a != -1 ) fail(__LINE__);
    if( ip->b != 1 ) fail(__LINE__);

    init_inherit( &i );
    fir( i );
    if( i.a != -1 ) fail(__LINE__);
    if( i.b != -1 ) fail(__LINE__);
    init_inherit( &i );
    bp = &i;
    fbr( *bp );
    if( i.a != -1 ) fail(__LINE__);
    if( i.b != 1 ) fail(__LINE__);

// 5
    init_inherit( &i );
    br.a++;
    ir.a += 5;
    ir.b *= 3;
    if( i.a != 7 ) fail(__LINE__);
    if( i.b != 3 ) fail(__LINE__);

// 5.2.2
    static_int = 0;
    return_int_ref() = 7;
    if( static_int != 7 ) fail(__LINE__);
}


int main( void )
{
    test( &i, i, i );
    _PASS;
} 

⌨️ 快捷键说明

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