#include <iostream>
#include <vector>
class A {
public:
virtual void talk() { printf("A\n"); }
};
class B: public A {
public:
virtual void talk() override { printf("B\n"); }
};
int main(void) {
std::vector<A> vec;
std::vector<A*> vec2;
A a;
B b;
a.talk();
b.talk();
std::cout << "---------------" << std::endl;
std::cout << "Will always output 'A' as slicing occurs:" << std::endl;
vec.push_back(a);
vec.push_back(b);
vec2.push_back(&a);
vec2.push_back(&b);
for (auto& c : vec) {
c.talk();
}
std::cout << "---------------" << std::endl;
std::cout << "Will make polymorphic call if 'virtual' specifier is enabled:" << std::endl;
for (auto& c : vec2) {
c->talk();
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKY2xhc3MgQSB7CnB1YmxpYzoKICAgIHZpcnR1YWwgdm9pZCB0YWxrKCkgeyBwcmludGYoIkFcbiIpOyB9Cn07CgpjbGFzcyBCOiBwdWJsaWMgQSB7CnB1YmxpYzoKICAgIHZpcnR1YWwgdm9pZCB0YWxrKCkgb3ZlcnJpZGUgeyBwcmludGYoIkJcbiIpOyB9Cn07CgppbnQgbWFpbih2b2lkKSB7CiAgICBzdGQ6OnZlY3RvcjxBPiB2ZWM7CiAgICBzdGQ6OnZlY3RvcjxBKj4gdmVjMjsKICAgIEEgYTsKICAgIEIgYjsKICAgIGEudGFsaygpOwogICAgYi50YWxrKCk7CgogICAgc3RkOjpjb3V0IDw8ICItLS0tLS0tLS0tLS0tLS0iIDw8IHN0ZDo6ZW5kbDsKICAgIHN0ZDo6Y291dCA8PCAiV2lsbCBhbHdheXMgb3V0cHV0ICdBJyBhcyBzbGljaW5nIG9jY3VyczoiIDw8IHN0ZDo6ZW5kbDsKCiAgICB2ZWMucHVzaF9iYWNrKGEpOwogICAgdmVjLnB1c2hfYmFjayhiKTsKICAgIHZlYzIucHVzaF9iYWNrKCZhKTsKICAgIHZlYzIucHVzaF9iYWNrKCZiKTsKCiAgICBmb3IgKGF1dG8mIGMgOiB2ZWMpIHsKICAgICAgICBjLnRhbGsoKTsKICAgIH0KCiAgICBzdGQ6OmNvdXQgPDwgIi0tLS0tLS0tLS0tLS0tLSIgPDwgc3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8ICJXaWxsIG1ha2UgcG9seW1vcnBoaWMgY2FsbCBpZiAndmlydHVhbCcgc3BlY2lmaWVyIGlzIGVuYWJsZWQ6IiA8PCBzdGQ6OmVuZGw7CgogICAgZm9yIChhdXRvJiBjIDogdmVjMikgewogICAgICAgIGMtPnRhbGsoKTsKICAgIH0KCn0=