неоднозначный вызов функции в дочернем классе Stack Overflow

У меня есть вопрос, связанный с примером ниже:

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’ всегда указывает на текущий объект? Большое спасибо!

-3

Решение

В B::foo() ты звонишь A::foo()Проходя мимо this указатель, который указывает на объект типа B,

внутри A::foo() ты звонишь this->g() который полиморфен, и он будет вызывать B::g(), потому что тип this указатель внутри A::foo() является B,

1

Другие решения

Поскольку g () является виртуальным, оно разрешается во время выполнения. Во время выполнения этот указатель указывает на объект B и, следовательно, вызывается g () из B

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector