dyncast6.c

来自「this is a gcc file, you can download it 」· C语言 代码 · 共 73 行

C
73
字号
// Special g++ Options: -w -ansi -pedantic-errors// Copyright (C) 2000 Free Software Foundation, Inc.// Contributed by Nathan Sidwell 20 June 2000 <nathan@codesourcery.com>// Origin GNATS bug report 143 from Carlo Wood <carlo@runaway.xs4all.nl>// We were generating incorrect type_info structures, and hence breaking// dynamic_cast.#include <stdio.h>class OBASE { public: virtual void bz () {}};class IBASE { public: virtual void by () {}};class V {public:int m; };class A : public virtual V { };class AA : public A {};class B : public OBASE, public A { public: virtual void foo(void) { } };class B1 : public OBASE, public AA { public: virtual void foo(void) { } };class C : public IBASE, public virtual V { };class D : public B, public C { };class E : public B, public virtual V { };class E1 : public B1, public virtual V {};class E2 : public B1, public A, public virtual V {};int main(void){  D d;  E e;  E1 e1;  E2 e2;  int code = 0;  OBASE* osd = &d;  OBASE* ose = &e;  OBASE* ose1 = &e1;  OBASE* ose2 = &e2;  if (!dynamic_cast<V*>(osd))    {      printf ("fail osd\n");      code++;    }    if (!dynamic_cast<V*>(ose))    {      printf ("fail ose\n");      code++;    }  if (!dynamic_cast<V*>(ose1))    {      printf ("fail ose1\n");      code++;    }  if (!dynamic_cast<V*>(ose2))    {      printf ("fail ose2\n");      code++;    }  return code;}

⌨️ 快捷键说明

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