У меня есть вопрос, связанный с примером ниже:
Class A{virtual foo(};virtual g()};
Class B: public A {virtual foo();virtual g()};
B::foo(){A::foo()};
A::foo(){g()};
Когда я вызываю B :: foo (), он будет использовать B :: g (), а не A :: g (), как это объяснить, потому что указатель ‘this’ всегда указывает на текущий объект? Большое спасибо!
В B::foo()
ты звонишь A::foo()
Проходя мимо this
указатель, который указывает на объект типа B
,
внутри A::foo()
ты звонишь this->g()
который полиморфен, и он будет вызывать B::g()
, потому что тип this
указатель внутри A::foo()
является B
,
Поскольку g () является виртуальным, оно разрешается во время выполнения. Во время выполнения этот указатель указывает на объект B и, следовательно, вызывается g () из B