#include <iostream>
#include <vector>
class A {
public:
void talk() { printf("A\n"); }
};
class B: public A {
public:
void talk() { 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();
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKY2xhc3MgQSB7CnB1YmxpYzoKICAgIHZvaWQgdGFsaygpIHsgcHJpbnRmKCJBXG4iKTsgfQp9OwoKY2xhc3MgQjogcHVibGljIEEgewpwdWJsaWM6CiAgICB2b2lkIHRhbGsoKSB7IHByaW50ZigiQlxuIik7IH0KfTsKCmludCBtYWluKHZvaWQpIHsKICAgIHN0ZDo6dmVjdG9yPEE+IHZlYzsKICAgIHN0ZDo6dmVjdG9yPEEqPiB2ZWMyOwogICAgQSBhOwogICAgQiBiOwogICAgYS50YWxrKCk7CiAgICBiLnRhbGsoKTsKCiAgICBzdGQ6OmNvdXQgPDwgIi0tLS0tLS0tLS0tLS0tLSIgPDwgc3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8ICJXaWxsIGFsd2F5cyBvdXRwdXQgJ0EnIGFzIHNsaWNpbmcgb2NjdXJzOiIgPDwgc3RkOjplbmRsOwoKICAgIHZlYy5wdXNoX2JhY2soYSk7CiAgICB2ZWMucHVzaF9iYWNrKGIpOwogICAgdmVjMi5wdXNoX2JhY2soJmEpOwogICAgdmVjMi5wdXNoX2JhY2soJmIpOwoKICAgIGZvciAoYXV0byYgYyA6IHZlYykgewogICAgICAgIGMudGFsaygpOwogICAgfQoKICAgIHN0ZDo6Y291dCA8PCAiLS0tLS0tLS0tLS0tLS0tIiA8PCBzdGQ6OmVuZGw7CiAgICBzdGQ6OmNvdXQgPDwgIldpbGwgbWFrZSBwb2x5bW9ycGhpYyBjYWxsIGlmICd2aXJ0dWFsJyBzcGVjaWZpZXIgaXMgZW5hYmxlZDoiIDw8IHN0ZDo6ZW5kbDsKCiAgICBmb3IgKGF1dG8mIGMgOiB2ZWMyKSB7CiAgICAgICAgYy0+dGFsaygpOwogICAgfQoKfQ==