// What is the output of each example program? #define EXAMPLE 1 // select example number here #if EXAMPLE == 1 /////////////////////////////////////////////////////////////// #include using namespace std; class Obj { public: Obj() { printf("con\n"); } ~Obj() { printf("des\n"); } private: int m_val; }; int main () { Obj a, b; return 0; } #elif EXAMPLE == 2 /////////////////////////////////////////////////////////////// #include using namespace std; class Obj { public: Obj() { printf("con\n"); } ~Obj() { printf("des\n"); } private: int m_val; }; int main () { Obj a, b; Obj c, d; Obj e; return 0; } #elif EXAMPLE == 3 /////////////////////////////////////////////////////////////// #include using namespace std; class Obj { public: Obj() { printf("con\n"); } ~Obj() { printf("des\n"); } private: int m_val; }; void F() { Obj aa; } int main () { Obj a, b; Obj* c = new Obj; F(); delete c; printf("hi\n"); Obj e; return 0; } #elif EXAMPLE == 4 /////////////////////////////////////////////////////////////// #include using namespace std; class Obj { public: Obj() { printf("con\n"); } ~Obj() { printf("des\n"); } int GetVal() const { return m_val; } void SetVal(int v) { m_val = v; } private: int m_val; }; int F(const Obj& x) { Obj y; y.SetVal( x.GetVal() ); return y.GetVal(); } int main () { Obj a, b; a.SetVal(2); b.SetVal(3); int c = F(a); int d = F(b); printf("%d %d\n", c, d); return 0; } #elif EXAMPLE == 5 /////////////////////////////////////////////////////////////// #include using namespace std; class Obj { public: Obj() : m_val(0) { printf("con1\n"); } Obj(int v) : m_val(v) { printf("con2\n"); } Obj(const Obj& o) { m_val = o.m_val; printf("copycon\n"); } ~Obj() { printf("des\n"); } Obj& operator=(const Obj& o) { m_val = o.m_val; printf("assign\n"); } int GetVal() const { return m_val; } void SetVal(int v) { m_val = v; } int F() { m_val *= 2; return m_val + 1; } private: int m_val; }; int F(const Obj& x, Obj y) { y.SetVal( x.GetVal() + 2 ); return x.GetVal(); } int main () { Obj a(2), b; b.SetVal( a.F() ); F(a, b); printf("%d %d\n", a.GetVal(), b.GetVal()); return 0; } #elif EXAMPLE == 6 /////////////////////////////////////////////////////////////// #include using namespace std; class Obj { public: Obj() : m_val(0) { printf("con1\n"); } Obj(int v) : m_val(v) { printf("con2\n"); } Obj(const Obj& o) { m_val = o.m_val; printf("copycon\n"); } ~Obj() { printf("des\n"); } Obj& operator=(const Obj& o) { m_val = o.m_val; printf("assign\n"); } int GetVal() const { return m_val; } void SetVal(int v) { m_val = v; } int F() { m_val += 5; return m_val * 2; } private: int m_val; }; int F(Obj* x, const Obj& y, Obj z) { x->SetVal( y.GetVal() * 3 ); return z.GetVal(); } int main () { Obj a(2), b, c; a.SetVal( b.F() ); F(&a, b, c); printf("%d %d\n", a.GetVal(), b.GetVal()); return 0; } #elif EXAMPLE == 7 /////////////////////////////////////////////////////////////// #include using namespace std; class Obj { public: Obj() : m_val(0) { printf("con1\n"); } Obj(int v) : m_val(v) { printf("con2\n"); } Obj(const Obj& o) { m_val = o.m_val; printf("copycon\n"); } ~Obj() { printf("des\n"); } Obj& operator=(const Obj& o) { m_val = o.m_val; printf("assign\n"); } int GetVal() const { return m_val; } void SetVal(int v) { m_val = v; } int F() { m_val += 5; return m_val * 2; } int G(Obj x) { m_val = x.m_val + 6; return m_val; } private: int m_val; }; int F(Obj* x, Obj y, Obj z) { z.SetVal( x->GetVal() + 1 ); return z.GetVal() + y.GetVal(); } int main () { Obj a(2), b, c; a.SetVal( b.F() ); int d = F(&a, b, c); int e = c.G(a); printf("%d %d %d\n", a.GetVal(), b.GetVal(), c.GetVal(), d, e); return 0; } #elif EXAMPLE == 8 /////////////////////////////////////////////////////////////// #include using namespace std; class Obj { public: Obj() : m_val(0) { printf("con1\n"); } Obj(int v) : m_val(v) { printf("con2\n"); } Obj(const Obj& o) { m_val = o.m_val; printf("copycon\n"); } ~Obj() { printf("des\n"); } Obj& operator=(const Obj& o) { m_val = o.m_val; printf("assign\n"); return *this; } int GetVal() const { return m_val; } void SetVal(int v) { m_val = v; } int F() { m_val += 5; return m_val * 2; } int G(Obj x) { m_val = x.m_val + 6; return m_val; } private: int m_val; }; int main () { Obj a(2), b(3); b = a; Obj c = a; c = a = b; a.SetVal( b.F() ); printf("%d %d %d\n", a.GetVal(), b.GetVal(), c.GetVal()); return 0; } #endif // EXAMPLE