📄 copy5.c
字号:
// { dg-do run }// GROUPS passed copy-ctors/*bad:sibelius402> a.outa=5 a.virtMember()=30BaseClass::Increm --> {i=5, virtMember()=30}a=7 a.virtMember()=30b=7 b.virtMember()=30BaseClass::Increm --> {i=7, virtMember()=999}b=9 b.virtMember()=30sibelius403> good:sibelius406> a.outa=5 a.virtMember()=30BaseClass::Increm --> {i=5, virtMember()=30}a=7 a.virtMember()=30b=7 b.virtMember()=30BaseClass::Increm --> {i=7, virtMember()=30}b=9 b.virtMember()=30*/extern "C" int printf (const char *, ...);extern "C" void exit (int);void die () { printf ("FAIL\n"); exit (1); }class BaseClass { friend int operator != (const BaseClass irv, int x); int i;public: BaseClass( const BaseClass& ir ) : i(ir.i) {}; BaseClass() : i(5) {}; virtual int virtMember() { return( 999 ); }; void Increm( int r );};void BaseClass::Increm( int r ){ if ((i == 5 && virtMember () == 30) || (i == 7 && virtMember () == 30)) i += r; else die ();}class DerivedClass : public BaseClass {public: int virtMember() { return( 30 ); };};int operator != (const BaseClass irv, int x) { return irv.i != x; }intmain (){ DerivedClass a; if (a != 5 || a.virtMember () != 30) die (); a.Increm(2); if (a != 7 || a.virtMember () != 30) die (); DerivedClass b = a; if (b != 7 || a.virtMember () != 30) die (); b.Increm(2); if (b != 9 || a.virtMember () != 30) die (); printf ("PASS\n");}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -