Advertisement
Guest User

Untitled

a guest
Jan 26th, 2020
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.65 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. class A{
  5. protected:
  6.   virtual void j() { cout << " A::j "; }
  7. public:
  8.   virtual void g() const { cout << " A::g "; }
  9.   virtual void f() { cout << " A::f "; g(); j(); }
  10.   void m(){ cout << " A::m "; g(); j(); }
  11.   virtual void k() {cout << " A::k "; j(); m(); }
  12.   virtual A* n() { cout << " A::n "; return this; }  
  13. };
  14.  
  15. class B: public A {
  16. public:
  17.   virtual void g() const override { cout <<" B::g "; }
  18.   virtual void m() { cout <<" B::m "; g(); j(); }
  19.   void k() { cout <<" B::k "; A::n(); }
  20.   A* n() override { cout <<" B::n "; return this; }
  21. };
  22.  
  23.  
  24. class C: public A {                                        
  25. private:                                                    
  26.   void j() { cout <<" C::j "; }                              
  27. public:                                                    
  28.   virtual void g() { cout <<" C::g "; }                      
  29.   void m() { cout <<" C::m "; g(); j(); }        
  30.   void k() const { cout <<" C::k "; k(); }        
  31. };
  32.  
  33. class D: public B {
  34. protected:
  35.   void j() { cout <<" D::j "; }
  36. public:
  37.   B* n() final { cout <<" D::n "; return this; }
  38.   void m() { cout <<" D::m "; g(); j(); }
  39. };
  40.  
  41. int main(){
  42.   A* p1 = new D(); A* p2 = new B(); A* p3 = new C(); B* p4 = new D(); const A* p5 = new C();
  43.    
  44.   (static_cast<C*>(p2))->k(); cout << endl;  /* va in stack overflow, c::k() chiama se stessa all'infinito,
  45.                                                                                                 ma p2 era di tipo statico A* e dinamico B*, lo static_cast lo ignora? */
  46.    
  47.     (static_cast<B*>(p3->n()))->g(); cout << endl; // A::n A::g // A::g invece che B::g?? come funziona lo ststic_cast su puntatori polimorfi?
  48.  
  49.   return 0;
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement