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); }
Для вызова метода 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.
Для вызова метода 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.