Documente Academic
Documente Profesional
Documente Cultură
S2. (10 puncte) Fără a rula acest program, să se precizeze ce se va afişa pe ecran
# include <iostream.h>
class BAZA {
public: int m;
BAZA (int x) { m = x; cout << "Construiesc cl BAZA:" << " m = " << m << endl; }
};
1
S3. (Enunţ: 1p; Subiect: 9 puncte). Fără a rula acest program, să se precizeze ce se va afişa pe ecran.
# include <iostream.h>
class BAZA {
int i;
protected: void set (int x) { i = x; }
int read() { return 3*i; }
public: BAZA(int x = 0) { i = x; cout << "Trec prin constructorul clasei BAZA\n"; }
int valoare (int m) { return m + 2*i; }
};
2
S4. (Enunţ: 1p; Subiect: 9 puncte). Fără a rula acest program, să se precizeze ce se va afişa pe ecran.
# include <iostream.h>
class A {
int i;
public: A(int x) { i = x; cout << "Constructorul clasei A\n"; }
~A() {cout << "Destructorul clasei A\n";}
int f() { return 2*i; }
};
class B {
int i;
public:
B(int y) { i = y; cout << "Constructorul clasei B\n"; }
~B() {cout << "Destructorul clasei B\n";}
int f() { return 2*i;}
};
class C : public B {
B b;
public:
C(int z, int t) : B(z), b(t) { cout << "Constructorul clasei C\n"; }
~C() {cout << "Destructorul clasei C\n";}
int f() { return B::f(); }
int g() { return B::f() + b.f() + f(); }
};
---------------------------------------------------
3
Răspunsuri:
S1.
1.1. Funcţiile de tip constructor (constructorii) nu pot întoarce nici o valoare. De aceea în corpul funcţiei nu trebuie
să apară instrucţiunea return.
1.2. Constructorii impliciţi nu au argumente, fiind, în cazul unei clase cu numele X, de forma următoare: X(void).
Aceştia, pot fi generaţi automat de compilator în cazul în care o clasă nu are constructori. Constructorii cu
parametrii impliciţi au argumente cu valori implicite.
1.3. O funcţie redefinită trebuie să difere în tip şi/sau în număr de parametri. O funcţie virtuală redefinită trebuie să
aibă acelaşi tip şi număr de parametri şi aceeaşi valoare de retur. În plus, funcţiile virtuale trebuie să fie funcţii
membre ale unei clase, ceea ce nu este absolut necesar în cazul funcţiilor redefinite. Din cauza acestor diferenţe,
pentru a descrie redefinirea funcţiilor virtuale se foloseşte termenul overriding (suprapunere).
1.4. Notând cu X numele clasei curente şi cu T1, T2,…, tipurile de date ale argumentelor, un constructor general
are declaraţia de forma: X(T1, T2, ...) {...};
1.5. Manipulatorii sunt funcţii speciale de formatare a informaţiilor în operaţiilor de I/E. Aceştia sunt asociaţi unui
stream şi pot să apară în unele instrucţiuni de I/E schimbând starea sream-ului respectiv.
S2.
Construiesc clasa BAZA: m = 2
Construiesc clasa D1: n = 3
Construiesc clasa D2: k = 3
Construiesc clasa D3: p = 4
12
Construiesc clasa BAZA: m = 3
Construiesc clasa D1: n = 1
Construiesc clasa D2: k = 1
Construiesc clasa D3: p = 7
24
S3. Se afisează:
Trec prin constructorul clasei BAZA
Trec prin constructorul clasei BAZA
Trec prin constructorul clasei BAZA
Trec prin constructorul clasei DERIV
3
3
9
45
S4. Se afisează:
Constructorul clasei A
6
Constructorul clasei B
10
Destructorul clasei B
Destructorul clasei A
Constructorul clasei B
Constructorul clasei B
Constructorul clasei C
2 8
Destructorul clasei C
Destructorul clasei B
Destructorul clasei B