#include #include #include class A { int _a; protected: int _ap; public: A(int x) : _a(x), _ap(x / 2) { std::cout << "Construindo A " << _a << std::endl; } A(A const &x) : _a(x._a), _ap(x._ap) { std::cout << "Copiando um A " << _a << std::endl; } virtual int f() { return 2 * _a; } int g() { return _a + _ap; } virtual ~A() { std::cout << "Destruindo a " << _a << std::endl; } }; class B : public A { int _b; public: B(int x) : A(5 * x), _b(2 * x) { std::cout << "Construindo B " << _b << std::endl; } int f() override { return A::f() + _b; } int g() { return _b + _ap; } ~B() { std::cout << "Destruindo b " << _b << std::endl; } }; void prim(A a) { std::cout << "Em prim: " << a.f() << " " << a.g() << std::endl; } void sec(A &a) { std::cout << "Em sec: " << a.f() << " " << a.g() << std::endl; } int main(int, char const *[]) { std::vector va; std::cout << "<<<1>>>\n"; for (int i = 0; i < 3; ++i) { va.emplace_back(i); } std::cout << "<<<2>>>\n"; std::vector> vpa; for (int i = 0; i < 3; ++i) { vpa.push_back(std::make_unique(i)); } std::cout << "<<<3>>>\n"; for (int i = 0; i < 3; ++i) { vpa.push_back(std::make_unique(i)); } std::cout << "<<<4>>>\n"; for (auto &a : va) { prim(a); sec(a); } std::cout << "<<<5>>>\n"; for (auto &pa : vpa) { prim(*pa); sec(*pa); } std::cout << "<<<6>>>\n"; return 0; }