fork download
  1. #include <iostream>
  2.  
  3. class BaseClass
  4. {
  5. public:
  6. void myFunc() //Can't be overridden, can be overloaded.
  7. {
  8. std::cout << "BaseClass::myFunc() called" << std::endl;
  9. }
  10.  
  11. virtual void myVirtualFunc() //Can be overridden, but doesn't have to be.
  12. {
  13. std::cout << "BaseClass::myVirtualFunc() called" << std::endl;
  14. }
  15.  
  16. virtual void myPureVirtualFunc() = 0; //Must be overridden.
  17. };
  18.  
  19. class DerivedClass : public BaseClass
  20. {
  21. public:
  22. void myFunc()
  23. {
  24. std::cout << "DerivedClass::myFunc() called" << std::endl;
  25. }
  26.  
  27. virtual void myVirtualFunc()
  28. {
  29. std::cout << "DerivedClass::myVirtualFunc() called" << std::endl;
  30. }
  31.  
  32. virtual void myPureVirtualFunc()
  33. {
  34. std::cout << "DerivedClass::myPureVirtualFunc() called" << std::endl;
  35. }
  36. };
  37.  
  38. int main()
  39. {
  40. //BaseClass baseClass; //Can't be constructed because of pure-virtual.
  41. DerivedClass derivedClass;
  42.  
  43. BaseClass &derivedPretendingToBeBase = derivedClass;
  44.  
  45. derivedClass.myFunc(); //Calls DerivedClass::myFunc().
  46. derivedClass.myVirtualFunc(); //Calls DerivedClass::myVirtualFunc().
  47. derivedClass.myPureVirtualFunc(); //Calls DerivedClass::myPureVirtualFunc().
  48.  
  49. derivedPretendingToBeBase.myFunc(); //Calls BaseClass::myFunc(), because it's not virtual.
  50. derivedPretendingToBeBase.myVirtualFunc(); //Calls DerivedClass::myVirtualFunc(), because it IS virtual and overridden.
  51. derivedPretendingToBeBase.myPureVirtualFunc(); //Calls DerivedClass::myPureVirtualFunc(), because it is virtual and overridden.
  52.  
  53. return 0;
  54. }
Success #stdin #stdout 0s 2896KB
stdin
Standard input is empty
stdout
DerivedClass::myFunc() called
DerivedClass::myVirtualFunc() called
DerivedClass::myPureVirtualFunc() called
BaseClass::myFunc() called
DerivedClass::myVirtualFunc() called
DerivedClass::myPureVirtualFunc() called