Во-первых, я Java-кодер и хочу понять полиморфизм в С++. Я написал пример для учебных целей:
#include<iostream>
using namespace std;
class A
{
public:
virtual void foo(){ std::cout << "foo" << std::endl; }
};
class B : public A
{
public:
void foo(){ std::cout << "overriden foo" << std::endl; }
};
A c = B();
int main(){ c.foo(); } //prints foo, not overriden foo
Я ожидал, что overriden foo
будет напечатан, но это не так. Зачем? Мы переопределили метод foo
в class B
, и я подумал, что решение, которое следует вызывать, производится из типа среды выполнения, который в моем случае равен B
, но не статический тип ( в моем случае).
Живой пример там