#include <iostream>
class Foo {
public:
int x;
virtual void print();
};
class Bar: public Foo {
public:
int y;
virtual void print();
};
void Foo::print() {
std::cout << "x: " << this->x << '\n';
}
void Bar::print() {
std::cout << "x: " << this->x << " y: " << this->y << '\n';
}
void print(Foo foo) {
foo.print();
}
void print2(Foo &foo) {
foo.print();
}
void print3(Foo *foo) {
foo->print();
}
int main() {
Bar bar;
bar.x = 5;
bar.y = 10;
print(bar);
print2(bar);
print3(&bar);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgRm9vIHsKcHVibGljOgogICAgaW50IHg7CiAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoKTsKfTsKCmNsYXNzIEJhcjogcHVibGljIEZvbyB7CnB1YmxpYzoKICAgIGludCB5OwogICAgdmlydHVhbCB2b2lkIHByaW50KCk7Cn07Cgp2b2lkIEZvbzo6cHJpbnQoKSB7CiAgICBzdGQ6OmNvdXQgPDwgIng6ICIgPDwgdGhpcy0+eCA8PCAnXG4nOwp9Cgp2b2lkIEJhcjo6cHJpbnQoKSB7CiAgICBzdGQ6OmNvdXQgPDwgIng6ICIgPDwgdGhpcy0+eCA8PCAiIHk6ICIgPDwgdGhpcy0+eSA8PCAnXG4nOwp9Cgp2b2lkIHByaW50KEZvbyBmb28pIHsKICAgIGZvby5wcmludCgpOwp9Cgp2b2lkIHByaW50MihGb28gJmZvbykgewogICAgZm9vLnByaW50KCk7Cn0KCnZvaWQgcHJpbnQzKEZvbyAqZm9vKSB7CiAgICBmb28tPnByaW50KCk7Cn0KCmludCBtYWluKCkgewogICAgQmFyIGJhcjsKICAgIGJhci54ID0gNTsKICAgIGJhci55ID0gMTA7CgogICAgcHJpbnQoYmFyKTsKICAgIHByaW50MihiYXIpOwogICAgcHJpbnQzKCZiYXIpOwp9