0% au considerat acest document util (0 voturi)
66 vizualizări15 pagini

Oop Partea2 Studii de Caz

Aceste studii de caz analizează diferite aspecte ale programării orientate pe obiecte, cum ar fi constructori, destructori, excepții, șabloane, alocare dinamică și gestionarea memoriei, virtualizare și referințe. Fiecare studiu de caz prezintă un cod exemplu și rezultatul așteptat al executării acestuia.

Încărcat de

SicKu Eu
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
66 vizualizări15 pagini

Oop Partea2 Studii de Caz

Aceste studii de caz analizează diferite aspecte ale programării orientate pe obiecte, cum ar fi constructori, destructori, excepții, șabloane, alocare dinamică și gestionarea memoriei, virtualizare și referințe. Fiecare studiu de caz prezintă un cod exemplu și rezultatul așteptat al executării acestuia.

Încărcat de

SicKu Eu
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd

OOP - PARTEA 2 STUDII DE CAZ

PARTEA 2 STUDII DE CAZ

-versiune in lucru, Claudiu GURA ([Link]@[Link] )

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?

// [Link] : 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 << [Link]() << std::endl;

std::cout << (‐‐(‐‐a)).Get() << std::endl; std::cout << [Link]() << 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