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
165 +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 Апр в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 83 989 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир