p2846b.c

来自「linux下编程用 编译软件」· C语言 代码 · 共 54 行

C
54
字号
// { dg-do run  }// Shows that problem of initializing one object's secondary base from// another object via a user defined copy constructor for that base,// the pointer for the secondary vtable is not set after implicit// copying of the outer class, but rather has the pointer to the main// vtable for the secondary base left over from the user defined copy// constructor for that base.// Correct answer is B::beefy.// g++ prints A::beefy, which is wrong.  Cfront gets it right.// prms-id: 2846extern "C" int printf(const char *, ...);extern "C" void exit(int);class B;class A { public:  A(void){}  A(const A&){}  virtual void print(void) const { }  B compute(void) const;};class C {public:  C() { }  C(C& o) { }		// with it, things are wrong, without it, they're ok  virtual void beefy(void) const { printf("A::beefy\n"); exit(1); }};class B : private A, public C {public:  B(const A& x, int){}  void beefy(void) const { printf("B::beefy\n"); }};B A::compute(void) const{  B sub(*this, 1);  return sub;}int main (){  A titi;  titi.compute().beefy();  return 0;}

⌨️ 快捷键说明

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