Does a base class method call a derived class?

class BaseClass {
 public:
  virtual void method1(){
   method2();
  };
  virtual void method2(){
   std::cout << "Base Method" << std::endl;
  };
}

class DerivedClass : public BaseClass {
 virtual void method2(){
   std::cout << "Derived Method" << std::endl;
  };
}

int main() {
  DerivedClass derived;
  derived.method1();
}

In the above example, I get the "Derived Method" as the output. Why is this happening?

I understand what DerivedClassinherits from BaseClass, and therefore derivedcan cause method1, but I do not understand why method2from DerivedClasshides method2from BassClasswhen it is called from BaseClass.

Apologies for any bad code / errors - still new to C ++.

+4
source share
4 answers

Because method2- virtual.

virtual, , , , , ( , ), , .

, , . , , . method2 , method2. , , , , .

, virtual - .

, , , :

class BaseClass {
 public:
  virtual void method1(){
   BaseCLass::method2();
  };

, - .

+3

derived.method1() BaseClass::method1(), method2(). DerivedClass::method2() BaseClass::method2().

BaseClass::method2() BaseClass::method1(), :

class BaseClass {
 public:
  virtual void method1(){
   BaseClass::method2(); //explicit class scope prevents dynamic binding
  }
  virtual void method2(){
   std::cout << "Base Method" << std::endl;
  }
};
+2

. , . - . . 12 " ++ ( )" .

0

virtual method2() BaseClass. " ". method1 of BaseClass, method2 of BaseClass.

, - ( ). - ( ) . , DerivedClass method2 , " ".

0

Source: https://habr.com/ru/post/1535792/


All Articles