Documente Academic
Documente Profesional
Documente Cultură
07 06 11 A Barem
07 06 11 A Barem
Cuza Iasi
Facultatea de Informatic
Nume:
An:
II
III
Semian:
Grupa:
Figur 1
1) S se identifice ce ablon de proiectare este reprezentat n Fig. 1 i, n acest context, s se explice cum este aplicat principiul
(conceptul) POO referitor la abstractizare. Se va preciza i cum este realizat aceasta abstractizare n C++.
Rspuns.
1. Identificare ablon (observer: A subiect si C observator)
1p
2. Clasele A i C sunt clase abstracte
0.5p
3. Metoda update() este abstract; ea va fi implementat de clasa derivate 0.5p
4. Clasa A declar constructorii protejai
0.5p
5. Clasa C declar update() virtual pur
0.5
2) S se explice relaiile dintre clasele din diagrama reprezentat n Fig. 1.
Rspuns.
1. Relaia ntre A i C - asociere
1p
2. Realia dintre B i D - asociere
1p
3. Relaia dintre D - C i B A
1p
3) S se descrie n C++ relaiile dintre clasele din diagrama reprezentat n Fig. 1.
Rspuns.
1. Cod C++ relaia ntre A i C - asociere
1p
2. Cod C++ realia dintre B i D - asociere
1p
3. Cod C++ relaia dintre D - C i B A
1p
4)
#include <iostream>
using namespace std;
class C{
public:
C(int a = 0) : i(a) {cout << "C() ";}
C(const C& x) {
i = x.i;
cout << "C(C&) ";
}
~C() {cout << "~C() ";}
operator int() const{
cout << " int(C) "; return i;
}
private: int i;
};
C() C(C&) C() ~C() int(C) int(C) 10 0 int(C) int(C) 10 ~C() ~C()
C() C(C&) C() int(C) int(C) 10 0 int(C) int(C) 10 ~C() ~C() ~C()
C() C(C) C() ~C() int(C) int(C) 10 0 int(C) int(C) 10 ~C() ~C()
C() C(C&) C() int(C) int(C) 10 0 int(C) int(C) 10 ~C() ~C()
Justificare.
Constructor implicit 0.5p
Constructor copiere 0.5p
Atribuire
0.5p
Conversie
0.5p
Raspuns corect a
1p
int main(){
C a, b = a; a = 10;
int k = b;
cout << a <<' ' << k << ' ';
cout << a + b << ' ';
return 0;
}
5)
#include <iostream>
#include <math.h>
using namespace std;
template <class T=int> class punct {
public:
punct (T xx, T yy){x=xx; y=yy;}
T module () {
return T(sqrt(x*x + y*y));}
private:T x, y;
};
template <> class punct <unsigned> {
public:
punct (int xx, int yy){x=xx; y=yy;}
int module () { return x%y; }
private: int x, y;
};
int main () {
punct <unsigned> u (10,3);
punct <float> w(10,3);
cout << u.module() << ' ';
cout << int(w.module());
return 0;
}:
Rspuns.
mp map cu cheia int i val char
crearea lui mp
utilizare iterator
afiare
rezultat corect
(0,B); (1,A);
7)
#include <iostream>
using namespace std;
class A {
public: virtual int f() = 0;
};
class UNU:public A{
public:
int f(){cout << b <<' '; return 1;}
protected: static int b;
Clasa parametrizata
Specializare pentru unsigned
Suprascriere module()
Conversie de la float la int
Varianta corect c
0.5p
0.5p
0.5p
0.5p
1p
0.5p
0.5p
0.5p
0.5p
1p
ierarhia de clasa
0.5p
funcia f virtual
0.5p
a i b instane ale clasei DOI 0.5p
};
class DOI:public UNU {
public: DOI(){b++;}
int f() {
cout << b << ' '; return 2;
}
};
int UNU::b = 0;
int main(){
UNU* b = new DOI;
cout << b->f() << " ";
A* a = new DOI;
cout << a->f() << " ";
delete a; delete b; return 0;
}
0.5p
1p
8) (9 puncte) Un text este format din cuvinte. Fiecare cuvnt este un ir de caractere si are o lungime. Lungimea unui text este dat de
suma lungimilor cuvintelor care l compun la care se adaug numrul de cuvinte (care corespunde spaiilor i caracterului de
terminare). Un text este dinamic, n sensul c se poate aduga sau terge un cuvnt (de) la nceput.
S se descrie complet n C++ clasa Cuvant corespunztoare cuvintelor. Se va utiliza tipul string din STL.
S se descrie complet n C++ clasa Text corespunztoare textelor. Se va utiliza un container din STL pentru a reprezenta relaia
dintre clasa Text i Cuvant.
S se descrie o secven de program C++ care s creeze textul Stiu raspunsul la aceasta intrebare.
Rspuns .
clasa Cuvant:
o constructor
o metoda lungime()
o atributul sir
clasa Text:
o constructor
o metoda lungime()
o adugare
o tergere
o atribut cuvinte
utilizarea claselor pt. crearea textului
stil de scriere
0.5
1p
0.5p
0.5
1p
1p
1p
0.5p
2p
1p