opeq02.c

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

C
79
字号
#include "fail.h"
#include <stdio.h>


struct BP {
    int b;
    virtual BP & operator =( BP const & ) = 0;
    BP(int v) : b(v) {}
};
struct DP : BP {
    int d;
    virtual BP & operator =( BP const & );
    DP(int v) : BP(v), d(v) {}
};

BP & DP::operator =( BP const &s )
{
    if( this != &s ) {
	b = s.b + 1;
    }
    return *this;
}

struct B {
    int b;
    virtual B & operator =( B const & );
    B(int v) : b(v) {}
};

B & B::operator =( B const &s )
{
    if( this != &s ) {
	b = s.b - 1;
    }
    return *this;
}

struct D : B {
    int d;
    virtual B & operator =( B const & );
    D(int v) : B(v), d(v) {}
};

B & D::operator =( B const &s )
{
    if( this != &s ) {
	b = s.b + 1;
    }
    return *this;
}

void assign_D( D &d, D const &s )
{
    d = s;
}

void assign_DP( DP &d, DP const &s )
{
    d = s;
}

int main()
{
    DP x(1);
    DP nx(3);
    D *y = new D(3);
    D *ny = new D(5);

    assign_DP( nx, x );
    assign_DP( nx, nx );
    assign_D( *ny, *y );
    assign_D( *ny, *ny );
    if( x.b != 1 && x.d != 1 ) fail(__LINE__);
    if( nx.b != 2 && nx.d != 3 ) fail(__LINE__);
    if( y->b != 3 && y->d != 3 ) fail(__LINE__);
    if( ny->b != 4 && ny->d != 5 ) fail(__LINE__);
    _PASS;
}

⌨️ 快捷键说明

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