Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

Post on 30-Oct-2015

88 views 2 download

description

Subiecte din anii anteriori pentru examenul de programare orientata obiect.

Transcript of Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 1/60

Anul I Informatică (valabil şi pentru Anul II Matematică-Informatică) iunie 2005

Proiectare şi programare orientate pe obiecte

Examen scris

I. Spuneţi de câte ori se execută fiecare constructor în programul de mai jos şi înce ordine.

#i ncl ude <i ost r eam. h>cl ass cl s1{ pr ot ect ed: i nt x;

publ i c: cl s1( ) { x=13; } };cl ass cl s2: publ i c cl s1{ i nt y;

publ i c: cl s2( ) { y=15; }i nt f ( cl s2 ob) { r et ur n ( ob. x+ob. y) ; } };

i nt mai n( ){ cl s2 ob; cout <<ob. f ( ob) ;

r et ur n 0;} 

II. Descrieţi pe scurt diferenţa dintre funcţiile care returnează valoare şi cele carereturnează referinţă.

III. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ceafişează, altfel, spuneţi de ce nu este corect.

#i ncl ude <i ost r eam. h>cl ass cl s1

{ i nt x;publ i c: cl s1( ) { x=13; }

i nt g( ) { stati c i nt i ; i ++; r et ur n ( i +x) ; } };cl ass cl s2

{ i nt x;publ i c: cl s2( ) { x=27; }

cl s1& f ( ) { st at i c cl s1 ob; r et ur n ob; } };i nt mai n( ){ cl s2 ob;

cout <<ob. f ( ) . g( ) ;r et ur n 0;

}

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 2/60

IV. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ceafişează, altfel, spuneţi de ce nu este corect.

#i ncl ude <i ost r eam. h>cl ass cl s1{ pr ot ect ed: i nt x;

publ i c: cl s1( i nt i =10) { x=i ; }i nt get _x() { r et ur n x; } };

cl ass cl s2: c l s1{ publ i c: cl s2( i nt i ) : cl s1( i ) {} };i nt mai n( ){ cl s d( 37) ;

cout <<d. get_x( ) ;r et ur n 0;

}

V. Descrieţi pe scurt cum se pot defini funcţii de conversie între tipuri (clase).

VI. Cum trebuie definită variabila n din clasa de mai jos, dacă dorim ca ea să contorizeze numărul tuturor obiectelor care apar ţin clasei cl s la un moment dat.

cl ass cl s{ i nt n;

publ i c: cl s( ) { n ++; }~cl s( ) { n - - ; } };

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 3/60

VII. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ceafişează, altfel, spuneţi de ce nu este corect.

#i ncl ude <i ost r eam. h>cl ass cl s{ i nt x;

publ i c: cl s( i nt y) {x=y; }i nt oper at or *( cl s a, cl s b) {r et ur n ( a. x*b. x) ; } };

i nt mai n( ){ cl s m( 100) , n( 15) ;

cout <<m*n;r et ur n 0;

}

VIII. Spuneţi care este diferenţa dintre clasa generică (template) şi clasa abstractă şi ]nce situaţii se foloseşte fiecare dintre ele.

IX. Fiind date următoarele tipuri de clase:

cl ass B { / * i nstr ucti uni */ };cl ass D1: vi r t ual B { / * i nstr ucti uni */ };cl ass D2: vi r t ual B { / * i nstr ucti uni */ };cl ass D3: B { / * i nst r ucti uni */ };cl ass D4: pr i vat e B { / * i nst r ucti uni */ };

cl ass D5: vi r t ual publ i c B { / * i nstr ucti uni */ };cl ass M1: D1, publ i c D2, D3, pr i vat e D4, vi r t ual D5{ / * i nstr uct i uni * / };cl ass M2: D1, D2, vi r t ual D3, vi r t ual D4, vi r t ual D5{ / * i nstr uct i uni * / };

spuneţi de câte ori este moştenită clasa B în clasa M1. Dar în clasa M2 ?Justificaţi. 

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 4/60

X. Spuneţi care dintre declaraţiile funcţiei mai n( ) sunt corecte în programul de mai jos. Justificaţi.

#i ncl ude <i ost r eam. h>cl ass B1 { publ i c: i nt x; };cl ass B2 { i nt y; };cl ass B3 { publ i c: i nt z; };cl ass B4 { publ i c: i nt t ; };cl ass D: pr i vat e B1, pr ot ect ed B2, publ i c B3, B4{ i nt u; };i nt mai n( ){ D d;

cout <<d. u;cout <<d. x;cout <<d. y;cout <<d. z;cout<<d. t ;r et ur n 0;

}

XI. Descrieţi pe scurt diferenţa dintre transferul prin valoare şi transferul prinreferinţă al parametrilor în cazul apelului unei funcţii.

XII. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ceafişează, în caz negativ spuneţi de ce nu este corect.

#i ncl ude <i ost r eam. h>cl ass cl s{ i nt vi ;

publ i c: cl s( i nt v=37) { vi =v; }f r i end i nt & f ( cl s ) ; };

i nt & f ( cl s c) { return c. vi ; }i nt mai n( ){ const cl s d( 15) ;

f ( d) =8;cout <<f ( d) ;r et ur n 0;

}

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 5/60

XIII. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ceafişează, altfel, spuneţi de ce nu este corect.

#i ncl ude <i ost r eam. h>cl ass cl s1{ publ i c: i nt x;

cl s1( i nt i =20) { x=i ; } };cl ass cl s2{ publ i c: i nt y;

cl s2( i nt i =30) { y=i ; }oper at or cl s1( ) { cl s1 ob; ob. x=y; r et ur n ob; } };

cl s1 f ( cl s1 ob){ ob. x++;

r etur n ob;}i nt mai n( ){ cl s1 ob1; f ( ob1) ; cout <<ob1. x;

cl s2 ob2; f ( ob2) ; cout <<ob2. y;r et ur n 0;

}

XIV. Spuneţi pe scurt prin ce se caracterizează o metodă statică a unei clase.

XV. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ceafişează, altfel, spuneţi de ce nu este corect.

#i ncl ude <i ost r eam. h>

cl ass cl s{ i nt x;

publ i c: cl s( i nt i =25) { x=i ; }i nt f ( ) ; };

i nt cl s : : f ( ) { return x; }i nt mai n( ){ const cl s d( 15) ;

cout <<d. f ( ) ;r et ur n 0;

}

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 6/60

XVI. Spuneţi de câte ori se apelează destructorul clasei cl s în programul de mai jos.Justificaţi.#i ncl ude<i ost r eam. h>cl ass cl s{ publ i c: i nt x;

cl s( i nt i =0) { x=i ; } };

cl s f ( cl s c){ c. x++;

r et ur n c;}i nt mai n( ){ cl s r ( 10) ;

c l s s=f ( r) ;r et ur n 0;

}

XVII. Spuneţi care este diferenţa dintre incluziunea de clase şi moştenirea de clase şicând se foloseşte fiecare metodă.

XVIII. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ceafişează, în caz negativ spuneţi de ce nu este corect.

#i ncl ude <i ost r eam. h>t empl ate <cl ass t i p>

t i p di f ( t i p x, t i p y){ r et ur n x- y;}unsi gned di f ( unsi gned x, unsi gned y){ r eturn x>=y?x- y: y- x;}i nt mai n( ){ unsi gned i =7, j =8;

cout <<di f ( i , j ) ;r et ur n 0;

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 7/60

Anul I Informatică iunie 2006Proiectare şi programare orientate pe obiecte

Examen scris

I. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, precizaţi exact constructorii

care se execută şi în ce ordine. În caz negativ spuneţi de ce nu este corect.

#i ncl ude<i ost r eam. h>cl ass c l s1{ publ i c: i nt x;

cl s1( i nt i =13) { x=i ; } };cl ass c l s2: vi r t ual publ i c c l s1{ publ i c: cl s2( i nt i =15) { x=i ; } };cl ass c l s3: vi r t ual publ i c c l s1{ publ i c: cl s3( i nt i =17) { x=i ; } };cl ass cl s4: publ i c cl s1{ publ i c: cl s4( i nt i =19) { x=i ; } };cl ass cl s5: publ i c cl s2, publ i c cl s3, publ i c cl s4

{ publ i c: i nt y;cl s5( i nt i , i nt j ) : cl s4( i ) , cl s2( j ) { y=i +j ; }cl s5( cl s5& ob) ) { y=- ob. y; }};

i nt mai n( ){ cl s5 ob1( - 9, 3) , ob2=ob1;

cout <<ob2. y;r et ur n 0;

}

II. Descrieţi pe scurt constructorul de copiere şi situaţiile în care acesta este folosit..

III. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ce afişează, în caznegativ spuneţi de ce nu este corect.

#i ncl ude<i ost r eam. h>cl ass c l s{ i nt x;

const i nt y;publ i c: cl s( i nt i , i nt j ) : x( i ) , y( j ) { }

i nt i mp( i nt , i nt ) const; };i nt i mp( i nt i , i nt j ) const{ x=i ; y=j ; r et ur n x+y; }i nt mai n( )

{ cl s ob( 5) ;cout <<ob. i mp( - 9, 8) ;r et ur n 0;

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 8/60

IV. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ce afişează, în caznegativ spuneţi de ce nu este corect.

#i ncl ude <i ost r eam. h>cl ass B{ i nt a;

publ i c: B( i nt i =0) { a=i ; }

i nt get _a( ) { r et ur n a; } };cl ass D: pr i vat e B{ publ i c: D( i nt x=0) : B( x) {}

i nt get _a( ) { r et ur n B: : get _a( ) ; } };i nt mai n( ){ D d( - 89) ;

cout <<d. get_a( ) ;r et ur n 0;

}

V. Descrieţi pe scurt ce reprezintă obiectul implicit al unei funcţii.

VI. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ce afişează, în caznegativ spuneţi de ce nu este corect.

#i ncl ude<i ost r eam. h>cl ass B{ pr ot ect ed: i nt x;

B( i nt i =10) { x=i ; }publ i c: vi r t ual B oper at or +( B ob) { B y(x+ob. x) ;

r et ur n y; } };cl ass D: publ i c B{ publ i c: D( i nt i =10) { x=i ; }

voi d operator=( B p) { x=p. x; }B operat or+( B ob) { B y( x+ob. x+1) ;

r et ur n y; }voi d af i sare( ) { cout <<x; } };

i nt mai n( ){ D p1( - 59) , p2( 32) , *p3=new D;

*p3=p1+p2;p3- >af i sar e( ) ;r et ur n 0;

}

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 9/60

VII. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ce afişează, în caznegativ spuneţi de ce nu este corect.

#i ncl ude<i ost r eam. h>cl ass c l s{ publ i c: i nt sa;

cl s( i nt s=0) { sa=s; }

oper at or i nt ( ) { r et ur n sa; }i nt f ( i nt c) { ret ur n ( sa*( 1+c/ 100) ) ; } };

i nt mai n( ){ cl s p( 37) ;

cout <<p. f ( p) ;r et ur n 0;

}

VIII. Descrieţi diferenţa dintre un pointer şi o referinţă.

IX. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ce afişează, în caznegativ spuneţi de ce nu este corect.

#i ncl ude<i ost r eam. h>cl ass B{ publ i c: i nt x;

B( i nt i =0) { x=i ; }vi r t ual B aduna( B ob) { r et ur n( x+ob. x) ; }B mi nus( ) { r et ur n( 1- x); }voi d af i sare( ) { cout <<x; } };

cl ass D: publ i c B{ publ i c: D( i nt i =0) { x=i ; }

B aduna( B ob) { return(x+ob. x+1) ; } };i nt mai n( ){ B *p1, *p2;

p1=new D( 138) ;p2=new B( - 37) ;*p2=p2- >aduna( *p1) ;*p1=p2- >mi nus( ) ;p1- >af i sar e( ) ;r et ur n 0;

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 10/60

X. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ce afişează, în caznegativ spuneţi de ce nu este corect.

#i ncl ude <i ost r eam. h>t empl at e <cl ass t i p>cl ass c l s{ t i p z;

publ i c: cl s ( t i p i ) { z=i ; }t i p operator - ( cl s) ; };

t empl at e <cl ass t i p>t i p cl s<t i p>: : oper at or - ( cl s<t i p> a){ r et ur n z- a. z;}t empl at e <cl ass t i p>t i p di f ( t i p x, t i p y){ r et ur n x- y;}i nt di f ( i nt x, i nt y){ r etur n x>=y?x- y: y- x;}

i nt mai n( ){ cl s<i nt > i =3; cl s<f l oat> j =4;

cout <<di f ( i , j ) ;r et ur n 0;

XI. Descrieţi pe scurt cum puteţi prelua o dată prin incluziune şi a doua oar ă prin moştenire oclasă  numar într-o clasă  l i s t a care descrie liste nevide de dimensiune variabilă deelemente de tip numar .

XII. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ce afişează, în caznegativ spuneţi de ce nu este corect.

#i ncl ude<i ost r eam. h>cl ass c l s{ stat i c i nt x;

publ i c: cl s( i nt i =25) { x=i ; }f r i end i nt & f ( cl s ) ; };

i nt cl s: : x=- 13;i nt & f ( c l s c) { return c. x; }i nt mai n( )

{ cl s d( 15) ;cout <<f ( d) ;r et ur n 0;

}

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 11/60

XIII. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ce afişează, în caznegativ spuneţi de ce nu este corect.

#i ncl ude<i ost r eam. h>cl ass c l s{ i nt v, nr ;

publ i c : cl s( i nt i ) { nr =i ; v=new i nt [ i ] ; }

f r i end i nt & oper at or [ ] ( i nt ) ;f r i end ost r eam& operator<<( ost r eam&, cl s) ; };

i nt & oper at or [ ] ( cl s& x, i nt i ){ return x. v[ i ] ; }ost r eam& operat or<<( ost r eam& o, cl s x){ f or ( i nt i =0; i <x. nr ; i ++) cout <<x. v[ i ] <<” ”; r et ur n o; }i nt mai n( ){ cl s x(10) ;

x[ 5]=7;cout <<x;r et ur n 0;  

XIV. Descrieţi pe scurt metoda de identificare a tipului în timpul rulării (RTTI).

XV. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ce afişează, în caznegativ spuneţi de ce nu este corect.

#i ncl ude<i ost r eam. h>cl ass c l s{ stat i c i nt i ;

i nt j ;publ i c: cl s( i nt x=7) { j =x; }

st at i c i nt i mp( i nt k) { cl s a; r et ur n i +k+a. j ; } };i nt cl s: : i ;i nt mai n( ){ i nt k=5;

cout <<cl s: : i mp( k) ;r et ur n 0;

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 12/60

XVI. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ce afişează, în caznegativ spuneţi de ce nu este corect.

#i ncl ude<i ost r eam. h>cl ass c l s{ i nt x;

publ i c: cl s( i nt i =32) { x=i ; }

i nt f ( ) const; };i nt cl s: : f ( ) const { r et ur n x++; }voi d mai n( ){ const cl s d( - 15) ;

cout <<d. f ( ) ;}

XVII. Spuneţi dacă o variabilă constantă poate fi transmisă ca parametru al unei funcţii şi dacă da, în ce situaţii. Justificaţi.

XVIII. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ce afişează pentru ovaloare întreagă citită egală cu 7, în caz negativ spuneţi de ce nu este corect.

#i ncl ude <i ost r eam. h>f l oat f ( f l oat f ){ i f ( f ) throw f ;

r et ur n f / 2;}i nt mai n( ){ i nt x;

t r y{cout<<”Da- mi un numar i nt r eg: ”;ci n>>x;i f ( x) f ( x) ;el se t hr ow x;cout <<”Numar ul ”<<x<<” e bun! ”<<endl ;}cat ch ( i nt i ){ cout <<”Numar ul ”<<i <<” nu e bun! ”<<endl ;}r et ur n 0;

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 13/60

Anul II Matematică-Informatică ianuarie 2007Proiectare şi programare orientate pe obiecte

Test scris (verificare)

I. Spuneţi de câte ori se apelează fiecare constructor în programul de mai jos şi în ce ordine.

cl ass c l s1{ pr ot ect ed: i nt x;

publ i c: cl s1( ) { x=13; } };cl ass cl s2: publ i c cl s1

{ pr ot ect ed: i nt y;publ i c: cl s2( ) { y=15; } };

cl ass cl s3: publ i c cl s2{ pr ot ected: i nt z;

publ i c: cl s3( ) { z=17; }i nt f ( cl s3 ob) { r et ur n ob. x+ob. y+ob. z; } };

i nt mai n( ){ cl s3 ob;

ob. f ( ob) ;r et ur n 0;}

II. Spuneţi ce reprezintă o funcţie virtuală şi în ce condiţii o funcţie virtuală defineşte o clasă abstractă.

III. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ce afişează, în caznegativ spuneţi de ce nu este corect.

#i ncl ude<i ost r eam. h>cl ass c l s{ i nt x;

publ i c: cl s( ) { x=23; }i nt get _x( ) { r et ur n x; } };

i nt mai n( ){ cl s *p1, *p2;

p1=new cl s;p2=( cl s*)mal l oc(si zeof ( cl s)) ;i nt x=p1- >get_x( ) +p2- >get _x( ) ;cout <<x;r et ur n 0;

}

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 14/60

IV. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ce afişează, în caznegativ spuneţi de ce nu este corect.

#i ncl ude <i ost r eam. h>cl ass B{ i nt a;

B( i nt i =0) { a=i ; }

i nt get _a( ) { r et ur n a; } };cl ass D: pr ot ect ed B{ publ i c: D( i nt x=0) : B( x) {}

i nt get _a( ) { r et ur n B: : get _a( ) ; } };i nt mai n( ){ D d( - 89) ;

cout <<d. get_a( ) ;r et ur n 0;

}

V. Spuneţi pe scurt prin ce se caracterizează un câmp static al unei clase.

VI. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ce afişează, în caznegativ spuneţi de ce nu este corect.

#i ncl ude<i ost r eam. h>cl ass c l s1{ publ i c: i nt a;

cl s1( ) { a=7; } };cl ass c l s2

{ publ i c: i nt b;c l s2( i nt i ) { b=i ; } 

cl s2( cl s1& x) { b=x. a; } };i nt mai n( ){ cl s1 x;

cout <<x. a;cl s2 y( x) ;cout <<y. b;r et ur n 0;

}

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 15/60

VII. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ce afişează, în caznegativ spuneţi de ce nu este corect.

#i ncl ude<i ost r eam. h>cl ass c l s{ publ i c: i nt sa;

cl s( i nt s=0) { sa=s; }

oper at or f l oat ( ) { r et ur n sa; } };i nt f ( f l oat c) { r et ur n ( c*(1+c/ 100) ) ; }i nt mai n( ){ cl s p( 35) ;

cout <<f ( p) ;r et ur n 0;

}

VIII. Spuneţi ce reprezintă o funcţie prietenă (friend) a unei clase.

IX. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ce afişează, în caznegativ spuneţi de ce nu este corect.

#i ncl ude<i ost r eam. h>cl ass B{ pr ot ect ed: i nt x;

publ i c: B( ) { x=78; } };cl ass D1: vi r t ual publ i c B{ publ i c: D1( ) { x=15; } };cl ass D2: vi r t ual publ i c B

{ publ i c: D2( ) { x=37; } };cl ass C: publ i c D2, publ i c D1{ publ i c: i nt get _x( ) { r et ur n x; } };i nt mai n( ){ C ob;

cout <<ob. get_x( ) ;r et ur n 0;

}

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 16/60

X. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ce afişează, în caznegativ spuneţi de ce nu este corect.

#i ncl ude <i ost r eam. h>t empl at e <cl ass t i p>cl ass c l s{ t i p z;

publ i c: cl s ( t i p i ) { z=i ; }t i p oper at or - ( cl s a) { r et ur n z- a. z; }i nt operat or >=( cl s a) { r etur n z>=a. z; } };

t empl at e <cl ass t i p>t i p di f ( t i p x, t i p y){ r et ur n x- y;}i nt di f ( cl s<i nt > x, cl s<f l oat > y){ r etur n x>=y?x- y: y- x;}i nt mai n( ){ cl s<i nt > i =3; cl s<f l oat> j =4;

cout <<di f ( i , j ) ;

r et ur n 0;} 

XI. Spuneţi dacă o variabilă constantă poate fi transmisă ca parametru al unei funcţii şi dacă da, în ce situaţii. Justificaţi.

XII. Spuneţi de câte ori se apelează destructorul clasei cl s în programul de mai jos. Justificaţi.

cl ass c l s{ i nt x;publ i c: cl s( i nt i =0) { x=i ; }

cl s( cl s& ob) { x=ob. x; } };cl s& f ( cl s &c){ r et ur n c;}mai n( ){ cl s r ;

cl s s=r ;f ( f ( f ( s ) ) ) ;

}

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 17/60

XIII. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ce afişează, în caznegativ spuneţi de ce nu este corect.

#i ncl ude<i ost r eam. h>cl ass B{ i nt x;

publ i c: B( i nt i =0) { x=i ; } };

cl ass D: publ i c B{ publ i c: D( ) : B( 15) {}

i nt f ( ) { r et ur n x; } };i nt mai n( ){ D d;

cout <<d. f ( ) ;r et ur n 0;

}

XIV. Descrieţi pe scurt ce reprezintă obiectul implicit al unei metode.

XV. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ce afişează, în caznegativ spuneţi de ce nu este corect.

#i ncl ude<i ost r eam. h>cl ass c l s{ stat i c i nt i ;

i nt j ;publ i c: cl s( i nt x=7) { j =x; }st at i c i nt i mp( i nt k) { cl s a; r et ur n i +k+a. j ; } };

i nt cl s: : i ;i nt mai n( ){ i nt k=5;

cout <<cl s: : i mp( k) ;r et ur n 0;

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 18/60

XVI. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ce afişează, în caznegativ spuneţi de ce nu este corect.

#i ncl ude<i ost r eam. h>cl ass c l s{ i nt x;

publ i c: cl s( i nt i =32) { x=i ; }

i nt f ( ) const { r et ur n x++; } };voi d mai n( ){ const cl s d( - 15) ;

cout <<d. f ( ) ;}

XVII. Descrieţi pe scurt ce reguli verifică supraîncărcarea operatorilor.

XVIII. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ce afişează pentru ovaloare întreagă citită egală cu 7, în caz negativ spuneţi de ce nu este corect.

#i ncl ude <i ost r eam. h>f l oat f ( i nt y){ try

{ i f ( y%2) t hr ow y/ 2;}cat ch ( i nt i ){ i f ( i %2) t hr ow;

cout <<”Numar ul ”<<i <<” nu e bun! ”<<endl ;}r et ur n y/ 2;

}i nt mai n( ){ i nt x;

t r y{ cout<<”Da- mi un numar i nt r eg: ”;

ci n>>x;i f ( x) f ( x) ;cout <<”Numar ul ”<<x<<” nu e bun! ”<<endl ;

}cat ch ( i nt i ){ cout <<”Numar ul ”<<i <<” e bun! ”<<endl ;}r et ur n 0;

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 19/60

An I Informatică iunie 2008Proiectare şi programare orientate pe obiecte

Examen scris

I.  SpuneŃi dacă programul de mai jos este corect. În caz afirmativ, spuneŃi ce afişează, în caznegativ spuneŃi de ce nu este corect.

#include<iostream.h>

class B

{ int x;

public: B(int i=2):x(i){}

int get_x() const { return x; } };

class D: public B

{ int *y;

public: D(int i=2):B(i){ y=new int[i];

for(int j=0; j<i; j++) y[j]=1; }

D(D& a){ y=new int[a.get_x()];

for(int i=0;i<a.get_x();i++) y[i]=a[i]; }

int& operator[](int i) { return y[i]; } };

ostream& operator<<(ostream& o, const D& a)

{ for(int i=0;i<a.get_x();i++) o<<a[i];

return o;

}

int main()

{ D ob(5);

cout<<ob;

return 0;

}

II.  DescrieŃi trei metode de proiectare diferite prin care elementele unei clase se pot regăsi îndublu exemplar, sub diverse forme, în definiŃia altei clase.

III.  SpuneŃi dacă programul de mai jos este corect. În caz afirmativ, spuneŃi ce afişează, în caznegativ spuneŃi de ce nu este corect.

#include<iostream.h>

class B

{ int x;

public: B(int i=10) { x=i; }

int get_x() { return x; } };

class D: public B

{ public: D(int i):B(i) {}

D operator+(const D& a) {return x+a.x; } };

int main()

{ D ob1(7), ob2(-12);

cout<<(ob1+ob2).get_x();

return 0;

}

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 20/60

IV.  SpuneŃi dacă programul de mai jos este corect. În caz afirmativ, spuneŃi ce afişează, în caznegativ spuneŃi de ce nu este corect.

#include<iostream.h>

class B

{ public: int x;

B(int i=16) { x=i; }

B f(B ob) { return x+ob.x; } };

class D: public B{ public: D(int i=25) { x=i; }

B f(B ob) { return x+ob.x+1; }

void afisare(){ cout<<x; } };

int main()

{ B *p1=new D, *p2=new B, *p3=new B(p1->f(*p2));

cout<<p3->x;

return 0;

}

V.  SpuneŃi ce este obiectul implicit al unei metode şi descrieŃi pe scurt proprietăŃile pe care lecunoaşteŃi despre acesta.

VI.  SpuneŃi dacă programul de mai jos este corect. În caz afirmativ, spuneŃi ce afişează, în caznegativ spuneŃi de ce nu este corect.

#include<iostream.h>

class cls

{ int *v,nr;

public: cls(int i) { nr=i; v=new int[i];

for (int j=1; j<nr; j++) v[j]=0; }

int size() { return nr; }

int& operator[](int i) { return *(v+i); } };int main()

{ cls x(10);

x[4]=-15;

for (int i=0; i<x.size(); i++) cout<<x[i];

return 0; } 

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 21/60

VII.  SpuneŃi dacă programul de mai jos este corect. În caz afirmativ, spuneŃi ce afişează, în caznegativ spuneŃi de ce nu este corect.

#include<iostream.h>

class cls

{ int x;

public: cls(int i=-20) { x=i; }

const int& f(){ return x; } };

int main(){ cls a(14);

int b=a.f()++;

cout<<b;

return 0;

}

VIII.  DescrieŃi pe scurt moştenirea virtuală şi scopul în care este folosită.

IX.  SpuneŃi dacă programul de mai jos este corect. În caz afirmativ, spuneŃi ce afişează, în caznegativ spuneŃi de ce nu este corect.

#include<iostream.h>

class B{ static int x;

int i;

public: B() { x++; i=1; }

~B() { x--; }

static int get_x() { return x; }

int get_i() { return i; }

};

int B::x;

class D: public B

{ public: D() { x++; }

~D() { x--; }

};

int f(B *q)

{ return (q->get_i())+1;}

int main()

{ B *p=new B;

cout<<f(p);

delete p;

p=new D;

cout<<f(p);

delete p;

cout<<D::get_x();

return 0;

}

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 22/60

X.  SpuneŃi dacă programul de mai jos este corect. În caz afirmativ, spuneŃi ce afişează, în caznegativ spuneŃi de ce nu este corect.

#include<iostream.h>

class B

{ int x;

public: B(int i=17) { x=i; }

int get_x() { return x; }

operator int() { return x; } };class D: public B

{ public: D(int i=-16):B(i) {} };

int main()

{ D a;

cout<<27+a;

return 0;

}

XI.  EnumeraŃi 3 metode de implementare a polimorfismului de compilare.

XII.  SpuneŃi dacă programul de mai jos este corect. În caz afirmativ, spuneŃi ce afişează, în caznegativ spuneŃi de ce nu este corect.

#include<iostream.h>

class cls

{ static int x;

public: cls (int i=1) { x=i; }

cls f(cls a) { return x+a.x; }

static int g() { return f()/2; } };int cls::x=7;

int main()

{ cls ob;

cout<<cls::g();

return 0;

}

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 23/60

XIII.  SpuneŃi dacă programul de mai jos este corect. În caz afirmativ, spuneŃi ce afişează, în caznegativ spuneŃi de ce nu este corect.

#include<iostream.h>

class cls

{ int *v,nr;

public: cls(int i=0) { nr=i; v=new int[i];

for (int j=0; j<size(); j++) v[j]=3*j; }

~cls() { delete[] v; }int size() { return nr; }

int& operator[](int i) { return v[i]; }

cls operator+(cls); };

cls cls::operator+(cls y)

{ cls x(size());

for (int i=0; i<size(); i++) x[i]=v[i]+y[i];

return x; }

int main()

{ cls x(10), y=x, z;

x[3]=y[6]=-15;

z=x+y;

for (int i=0; i<x.size(); i++) cout<<z[i];

return 0; } 

XIV.  DescrieŃi pe scurt mecanismul de tratare a excepŃiilor.

XV.  SpuneŃi dacă programul de mai jos este corect. În caz afirmativ, spuneŃi ce afişează, în caznegativ spuneŃi de ce nu este corect.

#include<iostream.h>

class B

{ int i;

public: B() { i=1; }

int get_i() { return i; }

};

class D: public B

{ int j;public: D() { j=2; }

int get_j() {return j; }

};

int main()

{ B *p;

int x=0;

if (x) p=new B;

else p=new D;

if (typeid(p).name()=="D*") cout<<((D*)p)->get_j();

return 0;

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 24/60

XVI.  SpuneŃi dacă programul de mai jos este corect. În caz afirmativ, spuneŃi ce afişează, în caznegativ spuneŃi de ce nu este corect.

#include <iostream.h>

class cls

{ int x;

public: cls(int i) { x=i; }

int set_x(int i) { int y=x; x=i; return y; }

int get_x(){ return x; } };int main()

{ cls *p=new cls[10];

int i=0;

for(;i<10;i++) p[i].set_x(i);

for(i=0;i<10;i++) cout<<p[i].get_x(i);

return 0;

}

XVII.  DescrieŃi pe scurt diferenŃa dintre un pointer şi o referinŃă.

XVIII. SpuneŃi dacă programul de mai jos este corect. În caz afirmativ, spuneŃi ce afişează, în caznegativ spuneŃi de ce nu este corect.

#include <iostream.h>

template<class T>

int f(T x, T y)

{ return x+y;

}

int f(int x, int y)

{ return x-y;

}

int main()

{ int a=5;

float b=8.6;

cout<<f(a,b);return 0;

}

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 25/60

Anul I Informatică (valabil şi pentru Anul II Matematică-Informatică) iunie 2005

Proiectare şi programare orientate pe obiecte

Examen scris

I. Spuneţi de câte ori se execută fiecare constructor în programul de mai jos şi înce ordine.

#i ncl ude <i ost r eam. h>cl ass cl s1{ pr ot ect ed: i nt x;

publ i c: cl s1( ) { x=13; } };cl ass cl s2: publ i c cl s1{ i nt y;

publ i c: cl s2( ) { y=15; }i nt f ( cl s2 ob) { r et ur n ( ob. x+ob. y) ; } };

i nt mai n( ){ cl s2 ob; cout <<ob. f ( ob) ;

r et ur n 0;} 

II. Descrieţi pe scurt diferenţa dintre funcţiile care returnează valoare şi cele carereturnează referinţă.

III. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ceafişează, altfel, spuneţi de ce nu este corect.

#i ncl ude <i ost r eam. h>cl ass cl s1

{ i nt x;publ i c: cl s1( ) { x=13; }

i nt g( ) { stati c i nt i ; i ++; r et ur n ( i +x) ; } };cl ass cl s2

{ i nt x;publ i c: cl s2( ) { x=27; }

cl s1& f ( ) { st at i c cl s1 ob; r et ur n ob; } };i nt mai n( ){ cl s2 ob;

cout <<ob. f ( ) . g( ) ;r et ur n 0;

}

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 26/60

IV. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ceafişează, altfel, spuneţi de ce nu este corect.

#i ncl ude <i ost r eam. h>cl ass cl s1{ pr ot ect ed: i nt x;

publ i c: cl s1( i nt i =10) { x=i ; }i nt get _x() { r et ur n x; } };

cl ass cl s2: c l s1{ publ i c: cl s2( i nt i ) : cl s1( i ) {} };i nt mai n( ){ cl s d( 37) ;

cout <<d. get_x( ) ;r et ur n 0;

}

V. Descrieţi pe scurt cum se pot defini funcţii de conversie între tipuri (clase).

VI. Cum trebuie definită variabila n din clasa de mai jos, dacă dorim ca ea să contorizeze numărul tuturor obiectelor care apar ţin clasei cl s la un moment dat.

cl ass cl s{ i nt n;

publ i c: cl s( ) { n ++; }~cl s( ) { n - - ; } };

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 27/60

VII. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ceafişează, altfel, spuneţi de ce nu este corect.

#i ncl ude <i ost r eam. h>cl ass cl s{ i nt x;

publ i c: cl s( i nt y) {x=y; }i nt oper at or *( cl s a, cl s b) {r et ur n ( a. x*b. x) ; } };

i nt mai n( ){ cl s m( 100) , n( 15) ;

cout <<m*n;r et ur n 0;

}

VIII. Spuneţi care este diferenţa dintre clasa generică (template) şi clasa abstractă şi ]nce situaţii se foloseşte fiecare dintre ele.

IX. Fiind date următoarele tipuri de clase:

cl ass B { / * i nstr ucti uni */ };cl ass D1: vi r t ual B { / * i nstr ucti uni */ };cl ass D2: vi r t ual B { / * i nstr ucti uni */ };cl ass D3: B { / * i nst r ucti uni */ };cl ass D4: pr i vat e B { / * i nst r ucti uni */ };

cl ass D5: vi r t ual publ i c B { / * i nstr ucti uni */ };cl ass M1: D1, publ i c D2, D3, pr i vat e D4, vi r t ual D5{ / * i nstr uct i uni * / };cl ass M2: D1, D2, vi r t ual D3, vi r t ual D4, vi r t ual D5{ / * i nstr uct i uni * / };

spuneţi de câte ori este moştenită clasa B în clasa M1. Dar în clasa M2 ?Justificaţi. 

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 28/60

X. Spuneţi care dintre declaraţiile funcţiei mai n( ) sunt corecte în programul de mai jos. Justificaţi.

#i ncl ude <i ost r eam. h>cl ass B1 { publ i c: i nt x; };cl ass B2 { i nt y; };cl ass B3 { publ i c: i nt z; };cl ass B4 { publ i c: i nt t ; };cl ass D: pr i vat e B1, pr ot ect ed B2, publ i c B3, B4{ i nt u; };i nt mai n( ){ D d;

cout <<d. u;cout <<d. x;cout <<d. y;cout <<d. z;cout<<d. t ;r et ur n 0;

}

XI. Descrieţi pe scurt diferenţa dintre transferul prin valoare şi transferul prinreferinţă al parametrilor în cazul apelului unei funcţii.

XII. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ceafişează, în caz negativ spuneţi de ce nu este corect.

#i ncl ude <i ost r eam. h>cl ass cl s{ i nt vi ;

publ i c: cl s( i nt v=37) { vi =v; }f r i end i nt & f ( cl s ) ; };

i nt & f ( cl s c) { return c. vi ; }i nt mai n( ){ const cl s d( 15) ;

f ( d) =8;cout <<f ( d) ;r et ur n 0;

}

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 29/60

XIII. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ceafişează, altfel, spuneţi de ce nu este corect.

#i ncl ude <i ost r eam. h>cl ass cl s1{ publ i c: i nt x;

cl s1( i nt i =20) { x=i ; } };cl ass cl s2{ publ i c: i nt y;

cl s2( i nt i =30) { y=i ; }oper at or cl s1( ) { cl s1 ob; ob. x=y; r et ur n ob; } };

cl s1 f ( cl s1 ob){ ob. x++;

r etur n ob;}i nt mai n( ){ cl s1 ob1; f ( ob1) ; cout <<ob1. x;

cl s2 ob2; f ( ob2) ; cout <<ob2. y;r et ur n 0;

}

XIV. Spuneţi pe scurt prin ce se caracterizează o metodă statică a unei clase.

XV. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ceafişează, altfel, spuneţi de ce nu este corect.

#i ncl ude <i ost r eam. h>

cl ass cl s{ i nt x;

publ i c: cl s( i nt i =25) { x=i ; }i nt f ( ) ; };

i nt cl s : : f ( ) { return x; }i nt mai n( ){ const cl s d( 15) ;

cout <<d. f ( ) ;r et ur n 0;

}

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 30/60

XVI. Spuneţi de câte ori se apelează destructorul clasei cl s în programul de mai jos.Justificaţi.#i ncl ude<i ost r eam. h>cl ass cl s{ publ i c: i nt x;

cl s( i nt i =0) { x=i ; } };

cl s f ( cl s c){ c. x++;

r et ur n c;}i nt mai n( ){ cl s r ( 10) ;

c l s s=f ( r) ;r et ur n 0;

}

XVII. Spuneţi care este diferenţa dintre incluziunea de clase şi moştenirea de clase şicând se foloseşte fiecare metodă.

XVIII. Spuneţi dacă programul de mai jos este corect. În caz afirmativ, spuneţi ceafişează, în caz negativ spuneţi de ce nu este corect.

#i ncl ude <i ost r eam. h>t empl ate <cl ass t i p>

t i p di f ( t i p x, t i p y){ r et ur n x- y;}unsi gned di f ( unsi gned x, unsi gned y){ r eturn x>=y?x- y: y- x;}i nt mai n( ){ unsi gned i =7, j =8;

cout <<di f ( i , j ) ;r et ur n 0;

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 31/60

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 32/60

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 33/60

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 34/60

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 35/60

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 36/60

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 37/60

Grupa 153

Proiectare gi programare orientate pe obiecte

Examen scris

29 mai 2009

I. Spun efi dacH program ul de m ai jos este corect. in caz afirmativ, spuneti ce afigeazg, in ca z

negativ spunefi de ce nu este corect.

#include<iostream.h>class A

I protected: int x;public: A(int i) :x(i) }

int get-x() { return x; 1 1;

class B: public A

I public: B(int i) :A(i) { }

B operatort(const B& b) {retcrn x+b.x; } 1 ;int main )

{ B a 2 3 ) , b (-15)cout<<a+b;

return 0;

1

11. Descriefi pe scurt cum es te implementat mecanismul de control a1 tipului in timpul execufiei- RTTI.

111. Spune ti dacH prograrnul de mai jos este corect. in caz afirmativ, spunefi ce afiyeaza, in c az

negativ spun efi de ce n u este corect.

#include<iostream.h>

class A

I int x;public: A(int i=25) { x=i; 1friend int& f(const A&); 1;

int& f (const A& c) { return c.x; 1int main )

I A a(15)cout<<f (a)

return 0;

1

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 38/60

IV. Spuneti dacii program ul de rnai jos este corect. i n caz afirmativ, spuneti ce afigeazii, in caz

negativ spuneti de ce nu este corect.

#include<iostream.h>

class A

I int *v, im;public: A(int i) { dim=i; v=new int[i];

for(int j=l; j < ~++) v[j]=j; }

int size() { return dim; 1friend int& operator I (A, int) };

int& operator [] (A a, int i) { return * (a.v+a.size ()-i) }

int main )

I A a(10);a[3]=7;

for (int i=O; i<a.size(); i+t) cout<<a[i];

return 0;

1

. -

V. Descriefi pe scurt difere nta din tre o clasii gi un obiect.

VI. Spuneti dace program ul de rnai jos este corect. in caz afirmativ, spuneri ce afigeazi, in caznegativ spuneti de ce n u este corect.

#include<iostream. >

class A

I int x;public: A(int i) x(i) }

int get x ) const { return x; } } ;-class B: public A

I int *y;public: B (int i) A(i) y=new int [i]

for(int j=0; j<i; j + + ) y[j]=l; }

B (B&)

int& operator[] int i) { return y [i] } 1;B::B(B& a)

I y=new int [a. et-x ( ) 1 ;

for (int i=0; <a. et-x ( ) ; ++) y [i] a [i]

1ostream& operator<<(ostream& 0, B a)

{ for (int i=0; <a. et-x ( ) ; ++) o<<a [il;

return o;

1int main )

I B b(5);cout<<b;

return 0;

1

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 39/60

VII. Spune fi dace programul de mai jos este corect. i n caz afirmativ, spu nefi ce afi~ eazii,n caz

negativ spunefi de ce nu este corect.

#include<iostream.h>class A

{ static int x;public: A(int i=l) { x=i; 1

int f(A a) { return x+a.x; 1static int g() { return f 2) 2; } } ;

int A::x=7;int main )

1 cout<<A: g ) ;

return 0;

1

VIII. Descriefi pe scurt crearea dinam ice de obiecte.

Spuneii dace programul de rnai jos este corect. i n caz afirmativ, spunefi ce afigeazl_ n ca rnegativ spunefi de ce nu este corect.

#include<iostream.h>

class A

{ protected: int x;

public: A(int i=12) { x=i;1

int get-x() { return x;

class B: public A

I public: B(int i):A(i) { I

B (const A& a) {return a

int main )

I A a(9);

B b(a1;cout<<b.get- ();

return 0;

1

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 40/60

X. Spuneli dace programul de mai jos este corect. in caz afirmativ, spuneli ce afigeaze, in c aznegativ spuneti de ce nu este corect.

#include<iostream.h>

class AI protected: int x;

public: A(int i=-16) { x=i; 1

virtual A f(A a) { return x+a.x; }

void afisare(){ cout<<x; } 1;

class B: public A

I public: B(int i=3):A(i) i }B f (B b) { return xtb.x+l; } 1;

int main )

{ A *pl=new B, *p2=new A, +p3=new A(p1->f(*p2));

p3->af isare ) ;

return 0;

1

XI. Descrieti pe scurt proprietgtile unui cimp static a1 unei clase.

XII. Spuneji dace programul de mai jos este corect. in caz afirmativ, spunefi ce a f i ~ e a z i ,n caz

negativ spunefi de ce nu este corect.

#include<iostream.h>

class A

{ public: int x;A(int i=O) { x=i; }

A operator; cons^ A& a) { return A(x+a. x); } } ;

ostream& operator<<(ostrean& o, A a) { o<<a.x; return o; )

template <class T>class B

I T y ;

public: B() I }

B(T i) { y=i; 1

B operator+ (B ob) { return B (ob.y+l); }

void afisare(){ cout<<y; I I ;

int main )I B<int> bl(-15); B<A> b2(1); Cc

(bltb2) afisare ) ;

return 0;

I

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 41/60

XIII. Spuneti dacil prograrnul de mai jos este corect. in caz afirmativ, spuneti ce afiqeaza, in caznegativ spunefi de ce nu este corect.

#include<iostream.h>

class A

{ public: int x;

A(int i=13) { x=i; 1 1;

class B: virtual public A

{ public: B(int i=15) { x=i; 1 1;

class C: virtual public A

{ public: C(int i=17) { x=i; 1 1;

class D: public A

{ public: D(int i=19) { x=i; 1 1;

class E: public B, public C, public D

{ public: int y;

E(int i,int j) :D(i),B(j) y=x+i+j; 1E(E& e) { y=-e.y; 11;

int main )

{ E el (-9,3), e2=el;

cout<<e2. ;

return 0;

1

XIV. Descrieti pe scurt funciiile $ablon $i dati exemplu de 3 situatii in care un ape1 de funciie NUgenereazil o versiune a functiei dintr-un l~a blon isponibil pentru functia respectivil.

XV. Spuneti daca programul de mai jos este corect. i n caz a firmativ, spuneti ce afigeazii, in caznegativ spuneti de ce nu e ste corect.

#include<iostream.h>

class A

I const int x, y;public: A(int i, int j ) :x(i), ~ ( j )

int f ) { return xty; 1 1 ;

int main )

I const A a(5,6)

cout<<a. ) ;

return 0;

1

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 42/60

XVI. Spuneti dacZI program ul de m ai jos este corec t. i n caz afirm ativ, spuneti ce afiqeazii, in caz

negativ spunefi de ce nu este co rect.

#include<iostream.h>

class A

I public: int x;

A(int i=O) { x=i; 1virtual A minus ) I return (1-x) 1 ;

class B: public AI public: B(int i=O) { x=i; 1void afisare() { cout<<x; } } ;

int main )

I A *pl=new B (27)*pl=pl->minus ) ;

pl->afisare ) ;

return 0;

XVII. -Descriefipe scurt diferenfa dintre polim orfismul de compilare 9i cel de execu tie.

XVIII. Spuneti dac l programul de mai jos este co rect. in caz afirmativ, spuneti ce afiqeazii pentru o

~ a l o a r entreagi citit5 egal5 cu 23, n caz negativ spuneti de ce nu este corect.

$include <iostream.h>

int f (int y)

I if (y%2) throw yt2.5;

return y / 2 ;

1int main 1{ int x;

tryIcout<<''Da-mi un numar: ";

cin>>x;

if (x%3) x=f(x);

else throw x;

cout<<"Nurnarul "<<x<<" e bun!"<<endl;

1catch (int i)

{ cout<<"Numarul "<<i<<" nu e bun!"<<endl;

1return 0;

1

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 43/60

Mai 2009 Grupa 151

1.class A{ public:

int x; A(int i = 0) {x = i;}virtual A minus() {cout << x;}};

class B : public A{ public:

B (int i = 0) {x = i;}void afisare(){cout << x;}};

int main(){ A *p1 = new A(18);

*p1 = p1 -> minus();dynamic_cast<B*>(p1) -> afisare();return 0;}

2. Crearea dinamica de obiecte

3.class A{ int x;

public: A(int i = 2) : x(i){}int get_x() const{return x;}};

class B : public A{ int *y;

public:B(int i = 2) : A(i){ y = new int[i];

for(int j = 0; j < i; j++)y[j] = 1; }

B (B& b){ y = new int[b.get_x()];

for(int i = 0; i < b.get_x(); i++) {y[i] = b[i];} }int& operator [] (int i) const { return y[i]; } };

ostream& operator << (ostream& o, const B b){ for (int i = 0; i < b.get_x(); i++) o << b[i];

return o; }

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 44/60

int main(){ const B b(5);

cout << b;return 0;}

4. class A{ protected:

int x;public:

 A (int i) : x(i){}int get_x() {return x;} };

class B : public A

{ public:B(int i) : A(i){}operator int () {return x;}B operator + (const B& b) {return x + b.x + 1;} };

int main(){ B a(2), b(-12);

cout << (a + b) + a;return 0; }

5. Proprietatile campurilor statice

6. class A{ int x;

public: A(int i = 25) {x = i;}int& f() const {return x;} };

int main(){ A a(15);

cout << a.f();

return 0; }

7. class A{ int x;

const int y;public:

 A(int i, int j) : x(i), y(j){}

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 45/60

int f(int, int) const; };

int A :: f(int i, int j) const{return x ++;}int main(){ A ob(5, -8);

cout << ob.f(-9, 8);return 0; }

8. Proprietatile destructorului

9. class A{ int x;

public: A(int i) : x(i){}

int get_x() const {return x;} };class B : public A{ int* y;

public:B(int i) : A(i){

y = new int[i];for (int j = 0; j < i; j++)

y[j] = 1;}B(B&);int& operator[] (int i) {return y[i];} };

B :: B(B& a){ y = new int[a.get_x()];

for(int i = 0; i < a.get_x(); i++){

y[i] = a[i];}

}

ostream& operator << (ostream& o, B a){

for(int i = 0; i < a.get_x(); i++)o << a[i];

}int main(){ B b(5);

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 46/60

cout << b;return 0; }

10. class A{ int i;

public: A(){i = 1;}int get_i(){return i;} };

class B : public A{ int j;

public:B(){j = 2;}int get_j(){return j;} };

int main(){ A *p;

int x = 0;if(x) p = new A;else p = new B;

if(typeid(p).name() == "B")cout << ((B*)p) -> get_j();

elsecout << "tipuri diferite";

return 0;}

11. Descrieti pe scurt diferenta dintre parametrii transmisi prin pointerisi cei prin referinta.

12. class A{ int x;

public: A(int i = 17){x = i;} };

class B

{ int x;public:

B(int i = -16){x = i;}operator A () {return x;}int get_x() {return x;} };

int main(){ A a;

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 47/60

B b = a;cout << b.get_x(); return 0; }

13. class A{ protected:

int x;public:

 A(int i = -16){x = i;}virtual A f(A a){return x + a.x;}void afisare() {cout << x;} };

class B : public A{ public:

B(int i = 3) : A(i){} A f(A a) {return x + a.x + 1;} };

int main()

{ A *p1 = new B, *p2 = new A, *p3 = new A (p1 -> f(*p2));p3 -> afisare();return 0;

}

14. Ce repezinta o functie virtuala si in ce conditii o functie virtualadefineste o clasa abstracta.

15. class A{ public:

int x; A(int i = 0) {x = i;} A operator + (const A& a){

return A(x + a.x);} };

ostream& operator << (ostream& o, A a){ o << a.x;

return o; }

template <class T>class B{ T y;

public:B(){}B(T i) { y = i; }B operator + (B ob) {return B(ob.y + 1);}

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 48/60

void afisare(){cout << y;} };

int main(){ B<int> b1(-15); B<A> b2(1);

(b1 + b2).afisare();return 0;

}

16. template <class T>T f(T x, T y){ return x + y; }

int f(int x, int y){ return x - y; }

int main(){ int* a = new int(5), *b = new int(8);

cout << f(a, b);return 0; }

17. RTTI

18. class A{ int x;

public: A(int i = 7){x = i;}int get_x(){return x;}operator int () {return x;} };

class B : public A{ public:

B(int i = -12) : A(i){}B operator + (B a) {return get_x() + a.get_x();} };

int main()

{ B a; int b = -21;b += a;cout << b;return 0; }

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 49/60

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 50/60

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 51/60

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 52/60

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 53/60

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 54/60

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 55/60

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 56/60

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 57/60

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 58/60

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 59/60

7/15/2019 Subiecte Programare Orientata Obiect, anul I, Semestrul II, Facultatea de Informatica - UB.

http://slidepdf.com/reader/full/subiecte-programare-orientata-obiect-anul-i-semestrul-ii-facultatea-de-informatica 60/60