Sunteți pe pagina 1din 15

OOP - PARTEA 2 STUDII DE CAZ

PARTEA 2 STUDII DE CAZ

-versiune in lucru, Claudiu GURA (claudiu.gura@gmail.com )

Update: SC 2 si SC 14, SC19 (Thanks Rares!), SC9 (Thx Marian)

Studiu Caz 1
Analizați codul următor (constructor, destructor, excepții, obiecte). Care este rezultatul afişat pe
ecran în urma executării programului?

// sc1.cpp : Defines the entry point for the console application.


//

#include "stdafx.h"
using namespace std;
/*
Analizați codul următor (constructor, destructor, excepții, obiecte).
Care este rezultatul afişat pe ecran în urma executării programului?
*/

#include <iostream>
class A{

public:
int m_n;

A(int n) : m_n(n) { if (0 == n) { throw "Examen"; } }


~A() { std::cout << m_n; }
};
int main() {

try { A a(1); A b(3); A c(2); }


catch (...) { std::cout << 3; }

int m;
cin >> m;

return 0;
}
REZULTAT:
Avem o lista de initializare cu verificare pe n, daca este 0 arunca
exceptie.
Va afisa din destructor 231
DONE

Studiu Caz 2
Analizați codul următor (constructor, şabloane, obiecte). Care este rezultatul afişat pe ecran în urma
executării programului?

#include "stdafx.h"
using namespace std;

Page 1 of 15
OOP - PARTEA 2 STUDII DE CAZ

/*
Analizați codul următor (constructor, şabloane, obiecte).
Care este rezultatul afişat pe ecran în urma executării programului?
*/

#include <iostream>

template <unsigned N> class A{

public:
A() { std::cout << N; }

private:
A<N‐1> m_a;

};
template<> class A<0> {

public:
A() { std::cout << 'A'; }
};

int main() {
A<4>();

int m;
cin >> m;

return 0;
}

REZULTAT:
A1234
DONE

Studiu Caz 3
Analizați codul următor (clase, constructor, destructor, obiecte). Care este rezultatul afişat pe ecran
în urma executării programului?

#include "stdafx.h"
using namespace std;
/*
Analizați codul următor (clase, constructor, destructor, obiecte).
Care este rezultatul afişat pe ecran în urma executării programului?
*/

#include <iostream>
class A{
public:

A(int n = 2) : m_i(n) {}
~A() { std::cout << m_i; }

protected:
int m_i;

Page 2 of 15
OOP - PARTEA 2 STUDII DE CAZ

};
class B : public A {

public:
B(int n) : m_x(m_i + 1), m_a(n) {}

public:
~B() { std::cout << m_i; ‐‐m_i; }

private: A m_x; A m_a;


};

int main() {

B b(5);

int m;
cin >> m;

return 0;
}
REZULTAT:
Vom afisa 2531
MEMO

Studiu Caz 4
Analizați codul următor (clase constructori , câmpuri statice, obiecte). Care este rezultatul afişat pe
ecran în urma executării programului?

#include "stdafx.h"
using namespace std;
/*
Analizați codul următor (clase constructori , câmpuri statice, obiecte).
Care este rezultatul afişat pe ecran în urma executării programului?
*/

#include <iostream>

class A {

public:
A(int n = 0) : m_i(n) { std::cout << m_i; }

protected:
int m_i;

};
class B : public A {

public:
B(int n) :m_j(n), m_a(‐‐m_j), m_b() { std::cout << m_j; }

private:

Page 3 of 15
OOP - PARTEA 2 STUDII DE CAZ

int m_j;
A m_a;
A m_b;

static A m_c;
};
A B::m_c(3);

int main() {
B b(2);

int m;
cin >> m;

return 0;
}
REZULTAT:
Va afisa
30101

Studiu Caz 5
Analizați codul următor (clase, constructori , operatorii new şi delete, obiecte). Care este rezultatul
afişat pe ecran în urma executării programului?

#include "stdafx.h"
using namespace std;
/*
Analizați codul următor (clase, constructori , operatorii new şi delete, obiecte).

Care este rezultatul afişat pe ecran în urma executării programului?

*/

#include <iostream>

class A{

public: A(int n = 0) :m_i(n) { std::cout << m_i; ++m_i; }


protected: int m_i;
};
class B : public A {

public:
B(int n = 5) :m_a(new A[2]), m_x(++m_i) { std::cout << m_i; }
~B() { delete[] m_a; }

private: A m_x; A* m_a;


};

int main() {
B b;

int m;
cin >> m;

Page 4 of 15
OOP - PARTEA 2 STUDII DE CAZ

return 0;
}
REZULTAT:
Va afisa 02002

Studiu Caz 6
Analizați codul următor (clase, constructori, destructori, excepții, obiecte). Care este rezultatul afişat
pe ecran în urma executării programului?

#include "stdafx.h"
using namespace std;
/*
Analizați codul următor (clase, constructori, destructori, excepții, obiecte).
Care este rezultatul afişat pe ecran în urma executării programului?
*/

#include <iostream>
class A{

public:
A(int n) :m_n(n) { std::cout << "A"<<m_n; }
~A() { std::cout << "D"<< m_n; }

private: int m_n; };

int f(int n) {
if (1 == n) { throw 0; }

A l(n);

return (f(n‐1)*n / (n‐1));


}

int main() {
try {
int r = f(3); A a(r);
}

catch (int e) { std::cout << "E"<< e << std::endl; }

int m;
cin >> m;

return 0;
}

REZULTAT:
Va afisa 32230
(A3A2D2D3E0)

Page 5 of 15
OOP - PARTEA 2 STUDII DE CAZ

Studiu Caz 7
Analizați codul următor (clase, constructori, destructori, gestiunea dinamică a obiectelor,
virtualizare). Care este rezultatul afişat pe ecran în urma executării programului?

#include "stdafx.h"
using namespace std;
/*
Analizați codul următor (clase, constructori, destructori, gestiunea dinamică a
obiectelor, virtualizare).
Care este rezultatul afişat pe ecran în urma executării programului?
*/

#include <iostream>
class A {
public:
virtual ~A() { f(); }
public:
virtual void f() const {
std::cout << "A"<< 1;
}
};

class B : public A {
public:
~B() { f(); }
private:
virtual void f() const { std::cout <<"B" << 2; }
};
int main() {
A* a = new B;
delete a;
std::cout << std::endl;

int m;
cin >> m;

return 0;
}

REZULTAT:
Va afisa 21 (2 din destructorul din B si 1 din cel din A)

Studiu Caz 8
Analizați codul următor (clase, constructori, destructori, gestiunea dinamică a obiectelor, exceptii).
Care este rezultatul afişat pe ecran în urma executării programului?

#include "stdafx.h"
using namespace std;
/*
Analizați codul următor (clase, constructori, destructori, gestiunea dinamică a
obiectelor, exceptii).
Care este rezultatul afişat pe ecran în urma executării programului?
*/

#include <iostream>
class A {

Page 6 of 15
OOP - PARTEA 2 STUDII DE CAZ

public:
A(int n) { if (0 == n) { throw "Examen"; } }
};
int main() {
A *p0 = 0, *p1 = 0, *p2 = 0;
try {
p1 = new A(1); p0 = new A(0); p2 = new A(2);
}
catch (...) { std::cout << 3; }// orice exceptie

std::cout << ((0 != p1) ? 1 : 0); std::cout << ((0 != p0) ? 1 : 0);

std::cout << ((0 != p2) ? 1 : 0) << std::endl; delete p1; delete p0; delete p2;

int m;
cin >> m;

return 0;
}
REZULTAT:
Va afisa 3100

Studiu Caz 9
Analizați codul următor (clase, constructori, destructori, gestiunea dinamică a obiectelor, exceptii).
Care este rezultatul afişat pe ecran în urma executării programului?

#include "stdafx.h"
using namespace std;
/*
Analizați codul următor (clase, constructori, destructori, gestiunea dinamică a
obiectelor, exceptii).
Care este rezultatul afişat pe ecran în urma executării programului?
*/

#include <iostream>
class C{
public:

C(int i) : i(i) { std::cout << i; }


~C() { std::cout << i + 5; }

private: int i;
};

int main() {
C(2);
const C& c = C(1);

int m;
cin >> m;

return 0;
}
REZULTAT:
Va afisa 2716

Page 7 of 15
OOP - PARTEA 2 STUDII DE CAZ

Studiu Caz 10
Analizați codul următor (clase, constructori, destructori, referințe, virtualizare).

Care este rezultatul afişat pe ecran în urma executării programului?

#include "stdafx.h"
using namespace std;
/*
Analizați codul următor (clase, constructori, destructori, referințe, virtualizare).

Care este rezultatul afişat pe ecran în urma executării programului?

*/

#include <iostream>
class B{
public:
virtual int shift(int n = 2) const { return n << 2; }
};

class D : public B {
public:
int shift(int n = 3) const { return n << 3; }
};

int main() {
const D d;
const B* b = &d;
std::cout << b ‐>shift();

int m;
cin >> m;

return 0;
}

REZULTAT:
Va afisa 16 (2 zecimal shiftat 3 biti la stanga)

Studiu Caz 11
Analizați codul următor (clase, constructori, destructori, referințe, virtualizare). Care este rezultatul
afişat pe ecran în urma executării programului?

#include "stdafx.h"
using namespace std;
/*
Analizați codul următor (clase, constructori, destructori, referințe, virtualizare).
Care este rezultatul afişat pe ecran în urma executării programului?

*/

#include <iostream>
class A{
public:

Page 8 of 15
OOP - PARTEA 2 STUDII DE CAZ

virtual void f(int n) { std::cout << n << 1; }


virtual ~A() {}
void f(int n) const { std::cout << n; }
};
class B : public A {

public:
void f(int n) { std::cout << (n << 1); }
void f(int n) const { std::cout << n + 1; }

};
int main() {
const A a; B b;
A& c = b;

const A* d = &b;
a.f(2);
b.f(2);

c.f(1); d‐>f(1);

int m;
cin >> m;

return 0;
}

REZULTAT:
Va afisa 2421

Studiu Caz 12
Analizați codul următor (clase, constructori, destructori, alocare / eliberare,virtualizare). Care este
rezultatul afişat pe ecran în urma executării programului?

#include "stdafx.h"
using namespace std;
/*
Analizați codul următor (clase, constructori,
destructori, alocare / eliberare,
virtualizare). Care este rezultatul afişat pe
ecran în urma executării programului?

*/

#include <iostream>
class A {
public:
A() { f(); }
virtual ~A() {}
public:
virtual void f() const { std::cout << 1; }
};
class B : public A {
public:
B() { f(); }
private:
virtual void f() const {
std::cout <<
2;

Page 9 of 15
OOP - PARTEA 2 STUDII DE CAZ

}
};
int main() {
A* a = new B;
delete a;
std::cout << std::endl;

int m;
cin >> m;

return 0;
}

REZULTAT:
Va afisa 12

Studiu Caz 13
Analizați codul următor (cu ierarhie de clase). Care este rezultatul afişat pe ecran în urma executării
programului?

#include "stdafx.h"
using namespace std;
/*
Analizați codul următor (cu ierarhie de clase).
Care este rezultatul afişat pe ecran în urma executării programului?

*/

#include <iostream>
class E{
typedef int INT;
};

class D : public E {};


class C : public D {};

int main() {

std::cout << sizeof(E) << " " << sizeof(D) << " " << sizeof(C) << std::endl;

int m;
cin >> m;

return 0;
}

REZULTAT:
Va afisa 111

Studiu Caz 14
Analizați codul următor (cu ierarhie de clase şi virtualizare). Care este rezultatul afişat pe ecran în
urma executării programului?

#include "stdafx.h"

Page 10 of 15
OOP - PARTEA 2 STUDII DE CAZ

using namespace std;


/*
Analizați codul următor (cu ierarhie de clase şi virtualizare).
Care este rezultatul afişat pe ecran în urma executării programului?
*/

#include <iostream>

class B {
b‐>Q();
public:
delete b;
B() { P(); } return 0;
~B() { P(); }
}
void Q() { P(); }

virtual void P(int x = 0x10) { std::cout << "U::P:x = " << x << std::endl; }
};

class C : public B {
public:
C() {}

virtual void P(int x = 0x100) { std::cout << "V::P:x = " << x << std::endl; }
};

int main() {
B *b = new C();
b‐>Q();
delete b;

int m;
cin >> m;

return 0;
}
REZULTAT:
U::P:x = 16

V::P:x = 16

U::P:x = 16

Studiu Caz 15
Analizați codul următor (cu clase şi virtualizare). Care este rezultatul afişat pe ecran în urma
executării programului?

#include "stdafx.h"
using namespace std;
/*
Analizați codul următor (cu clase şi virtualizare).
Care este rezultatul afişat pe ecran în urma executării programului?
*/

#include <iostream>
class A{
public:

Page 11 of 15
OOP - PARTEA 2 STUDII DE CAZ

~A() { std::cout << "A :: ~A()" << std::endl; }


};

class B {
public:
~B() { std::cout << "B :: ~B()" << std::endl; }

};
class S {
A a;
B b;
public:
S() : b(), a() {}
virtual ~S() { std::cout << "S :: ~S()" << std::endl; }
};

int main(void)
{
S s;

int m;
cin >> m;

return 0;
}
REZULTAT:
Va afisa
S :: ~S()
B :: ~B()
A :: ~A()

Studiu Caz 16
Analizați codul următor (cu moştenire multiplă şi virtualizare). Care este rezultatul afişat pe ecran în
urma executării programului?

#include "stdafx.h"
using namespace std;
/*
Analizați codul următor (cu moştenire multiplă şi virtualizare).
Care este rezultatul afişat pe ecran în urma executării programului?
*/

#include <iostream>
class A{
public:
~A() { std::cout << "A :: ~A()" << std::endl; }
};

class B {
public:
~B() { std::cout << "B :: ~B()" << std::endl; }
};

class S : public A, public B {


public:

Page 12 of 15
OOP - PARTEA 2 STUDII DE CAZ

virtual ~S() { std::cout << "S :: ~S()" << std::endl; }


};

int main(void) { S* s = new S(); delete s;

int m;
cin >> m;

return 0;
}

REZULTAT:
Va afisa
S :: ~S()
B :: ~B()
A :: ~A()

Studiu Caz 17
Analizați codul următor (cu ierarhie de clase şi virtualizare). Care este rezultatul afişat pe ecran în
urma executării programului?

#include "stdafx.h"
using namespace std;
/*
Analizați codul următor (cu moştenire multiplă şi virtualizare).
Care este rezultatul afişat pe ecran în urma executării programului?
*/

#include <iostream>
class F{
public:

F() { std::cout << "F::F()" << std::endl; } virtual ~F() {


std::cout << "F::~F()" << std ::
endl;
}
};
class A : public F {

int x, y; public:

A() { std::cout << "A::A()" << std::endl; } virtual ~A() {


std::cout << "A::~A()" << std ::
endl;
}

};

class B : public A {
int z;
public:

B(int z = 0) { std::cout << "B::B()" << std::endl; }

virtual ~B() { std::cout << "B::~B()" << std::endl; }


};

Page 13 of 15
OOP - PARTEA 2 STUDII DE CAZ

int main(void) {

F * f[10]; int n = 0; f[n++] = new B(); f[n++] = new A();

for (int i = 0; i<n; i++) delete f[i];

int m;
cin >> m;

return 0;
}

REZULTAT:
Va afisa
F::F()
A::A()
B::B()
F::F()
A::A()
B::~B()
A::~A()
F::~F()
A::~A()
F::~F()

Studiu Caz 18
Analizați codul următor (tipuri de constructori). Care este rezultatul afişat pe ecran în urma
executării programului?

#include "stdafx.h"
using namespace std;
/*
Analizați codul următor (tipuri de constructori).
Care este rezultatul afişat pe ecran în urma executării programului?
*/

#include <iostream>
class A {
public:
A() { std::cout << "A::A()" << std::endl; }

A(A &a) { std::cout << "A::A(A&)" << std::endl; }


~A() { std::cout << "A::~A()" << std::endl; }

};
int main(void) {
A a;

A x = a; A y(x);

int m;
cin >> m;

return 0;
}

Page 14 of 15
OOP - PARTEA 2 STUDII DE CAZ

REZULTAT:
Va afisa
A::A()
A::A(A&)
A::A(A&)

Studiu Caz 19 <<


Analizați codul următor (supraîncărcare operatori ++ şi --). Care este rezultatul afişat pe ecran în
urma executării programului?

#include "stdafx.h"
using namespace std;
/*
Analizați codul următor (supraîncărcare operatori ++ şi ‐‐).
Care este rezultatul afişat pe ecran în urma executării programului?
*/

#include <iostream>
class A{
public:

A(float pa) : a(pa) {} float Get() { return a; }


A operator++() { a++; return *this; }
A operator‐‐() { a‐‐; return *this; }

private: float a;

};
int main(void) {
A a(1.0);

std::cout << (++(++a)).Get() << std::endl; std::cout << a.Get() << std::endl;

std::cout << (‐‐(‐‐a)).Get() << std::endl; std::cout << a.Get() << std::endl;

int m;
cin >> m;

return 0;
}

REZULTAT:
3
2
0
1

Nota!
*Studiu Caz 20 -nu se va da, cf dl Albeanu, mtg 9mai

Succes! 😊
Page 15 of 15

S-ar putea să vă placă și