Лето, температура за бортом +10, что уже радует.
Решили порешать задачки, ни у одну подкидываю.
Есть код:
#include <iostream>
class Foo {
public:
    Foo() : a_(0) {};
    Foo(int a) : a_(a) {};
    inline int getA() { return a_; };
    virtual void print() { std::cout << "{a: " << getA() << "}\n"; };
private:
    int a_;
};
class Bar : public Foo {
public:
    Bar() : Foo(), b_(0) {};
    Bar(int a, int b) : Foo(a), b_(b) {};
    inline int getB() { return b_; };
    virtual void print() override { std::cout << "{a: " << getA() << ", b: " << getB() << "}\n"; };
private:
    int b_;
};
int main() {
    Foo t1 = Bar(10,10);
    Bar t2 = Bar(20,20);
    Foo *t3 = new Bar(30,30);
    t1.print();
    t2.print();
    t3->print();
    delete t3;
    return 0;
}
Выхлоп ожидаемый:
...$ g++ -std=c++11 task.cpp && ./a.out
{a: 10}
{a: 20, b: 20}
{a: 30, b: 30}
И тут вопрос: «А как сделать вывод в первой строке такой же как в других? А чем это будет плохо?»


