fork download
  1. #include<iostream>
  2. class I{
  3. public:
  4. virtual void f()=0;
  5. };
  6.  
  7. enum TYPE{
  8. TYPE_I,
  9. };
  10.  
  11. class Base{
  12. public:
  13. Base(){
  14. std::cout << "Base::Base()\n";
  15. }
  16.  
  17. virtual ~Base(){
  18. std::cout << "Base::~Base()\n";
  19. }
  20. virtual TYPE getType()=0;
  21. int i;
  22. };
  23.  
  24. class A : public Base, public I {
  25. public:
  26. A(){
  27. std::cout << "A::A()\n";
  28. }
  29. virtual ~A(){
  30. std::cout << "A::~A()\n";
  31. }
  32. virtual TYPE getType(){
  33. std::cout << "A::getType()\n";
  34. return TYPE_I;
  35. }
  36. virtual void f(){ std::cout << "A::f()\n"; }
  37.  
  38.  
  39. };
  40.  
  41. int main(){
  42. A *a=new A;
  43. void *vp=a;
  44. if(static_cast<Base*>(vp)->getType()==TYPE_I){
  45. std::cout << "call I::f()\n";
  46.  
  47. static_cast<I*>(vp)->f();
  48. }
  49. std::cout << "delete a\n";
  50. delete a;
  51. }
Success #stdin #stdout 0.01s 2856KB
stdin
Standard input is empty
stdout
Base::Base()
A::A()
A::getType()
call I::f()
A::~A()
Base::~Base()
delete a
Base::~Base()