fork download
  1. #include <iostream>
  2. class Base{
  3. protected:
  4. virtual void Hoge()=0;
  5.  
  6. void Huga(){
  7. std::cout<<"I cry in Base::Huga();"<<std::endl;
  8. }
  9.  
  10. virtual void Hage(){
  11. std::cout<<"My head is not Light!!"<<std::endl;
  12. }
  13.  
  14. public:
  15. void CallA(){
  16. std::cout<<"*Base::CallA is start*"<<std::endl;
  17. Hoge();
  18. Huga();
  19. Hage();
  20. std::cout<<"*Base::CallA is end!*"<<std::endl;
  21. }
  22. };
  23.  
  24. class Derived:public Base{
  25. protected:
  26. virtual void Hoge(){
  27. std::cout<<"Override Hoge in Derived!"<<std::endl;
  28. }
  29.  
  30. void Huga(){
  31. std::cout<<"I cry in Derived::Huga();"<<std::endl;
  32. }
  33. virtual void Hage(){
  34. std::cout<<"I need Heir!!"<<std::endl;
  35. }
  36. public:
  37. void CallB(){
  38. std::cout<<"*Derived::CallB is start*"<<std::endl;
  39. CallA();
  40. Hoge();
  41. Huga();
  42. Hage();
  43. std::cout<<"-Call the base method from derived!^"<<std::endl;
  44. //Base::Hoge();
  45. Base::Huga();
  46. Base::Hage();
  47. std::cout<<"*Derived::CallB is end!*"<<std::endl;
  48. }
  49. };
  50.  
  51.  
  52. int main(){
  53. Derived D;
  54. Base* B = &D;
  55. std::cout<<"-------------------------"<<std::endl;
  56. B->CallA();
  57. std::cout<<"-------------------------"<<std::endl;
  58. D.CallB();
  59.  
  60. return 0;
  61. }
Success #stdin #stdout 0.01s 2728KB
stdin
Standard input is empty
stdout
-------------------------
*Base::CallA is start*
Override Hoge in Derived!
I cry in Base::Huga();
I need Heir!!
*Base::CallA is end!*
-------------------------
*Derived::CallB is start*
*Base::CallA is start*
Override Hoge in Derived!
I cry in Base::Huga();
I need Heir!!
*Base::CallA is end!*
Override Hoge in Derived!
I cry in Derived::Huga();
I need Heir!!
-Call the base method from derived!^
I cry in Base::Huga();
My head is not Light!!
*Derived::CallB is end!*