C++ как вызвать метод потомка, не определоного в предке? я понимаю что в А нет метода getSome(), но он есть в классе В, а в foo() я как раз и передаю экземпляр класса Вclass A {
}
class B : A {
int getSome();
}void foo(A& a) {
a.getSome(); //error: class 'A' has no member 'getSome()'
}
int main() {
B b();
foo(b);
}

21 Авг 2019 в 07:07
195 +1
1
Ответы
1

Для вызова метода getSome() класса B из метода foo(), который принимает объект класса A, можно использовать механизм динамического связывания (полиморфизм через виртуальные функции). Необходимо объявить метод getSome() класса A как виртуальный и переопределить его в классе B.

Пример:

#include <iostream>
class A {
public:
virtual int getSome() { return 0; }
};
class B : public A {
public:
int getSome() override { return 42; }
};
void foo(A& a) {
std::cout << a.getSome() << std::endl;
}
int main() {
B b;
foo(b); // вызовется метод getSome() класса B
return 0;
}

В этом примере метод getSome() в классе A объявлен как виртуальный, и в классе B переопределен. При вызове метода foo(b), где b - объект класса B передается по ссылке как объект класса A, будет вызван переопределенный метод getSome() класса B.

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир