intrebari colocviu poo Flashcards
Care dintre urmatoarele variante este cea mai potrivita pentru declararea unui pointer?
A. int x;
B. int &x;
C. ptr x;
D. int *x;
int *x;
Care dintre urmatoarele variante aloca o adresa de memorie variabilei de tip intreg a?
A. *a;
B. a;
C. &a;
D. adress(a);
&a;
Care dintre urmatoarele variante aloca o adresa de memorie pointerului a ?
A. a;
B. *a;
C. &a;
D. adress(a);
a;
Care dintre urmatoarele variante arata valoarea alocata pointerului a?
A. a;
B. val(a);
C. *a;
D. &a;
*a;
Care dintre urmatoarele variante este corecta pentru a aloca memorie in C?
A. new
B. malloc
C. create
D. value
malloc
Care dintre urmatoarele variante este corecta pentru a dealoca memorie in c?
A. free
B. delete
C. clear
D. remove
free
Care dintre urmatoarele variante nu este un prototip corect ?
A. int funct(char x, char y);
B. double funct(char x)
C. void funct();
D. char x();
double funct(char x)
Ce tip de functie va fi returnata folosind prototipul “int func(char x, float v, double t);”
A. char
B. int
C. float
D. double
int
Care dintre urmatoarele variante este adevarata pentru apelarea unei unei functii (presupunand ca functie exista)?
A. funct;
B. funct x, y;
C. funct();
D. int funct();
funct()
Care dintre urmatoarele variante este o functie completa?
A. int funct();
B. int funct(int x) {return x=x+1;}
C. void funct(int) {printf(„Salut!”)};
D. void funct(x) {printf(„bauuuu !”);}
void funct(int) {printf(“Salut!”)};
Ce tip de date returneaza constructorului unei clase?
- void;
- pointer cãtre void;
- un tip de date specificat de programator;
- nu returneazã nici un tip.
nu returneaza niciun tip
se considera urmatoarele declaratii:
class B{
int i;
};
class D : public B {….}
Care este tipul de acces la membrul i al clasei B pentru membri publici ai clasei D?
- public;
- protected
- inacccesibil;
- private.
innaccesibil
Deoarece baza b are date private iar d are date publice
Care dintre propietatile alaturate apartin functiilor friend ale unei clase?
- funcţiile friend se moştenesc prin derivare;
- funcţiile friend au acces doar la membrii public ai clasei;
- funcţiile friend au acces doar la membrii statici ai clasei;
- funcţiile friend au acces la toţi membrii clasei.
functiile friend au acces la toti membrii clasei
ce este o data membru statistica?
- o datã membru staticã este unicã pentru toate instanţele clasei;
- o datã membru staticã este alocatã pe stivã;
- o datã membru staticã este implicit publicã pentru toate instanţele clasei;
- o datã membru staticã poate fi accesatã numai de funcţiile membru publice
o data membru statistica este unica pentru toate instantele clasei
de ce tip este parametrul formal al functiei f prototip:
void f(const int&a);
- prototipul este greşit;
- de tip referinta cãtre int, data de intrare;
- de tip referinta cãtre int, data de tip intrare / iesire;
- de tip int constant, ce nu poate fi modificat în functie
de tip referinta catre int, data de intrare
nu poate fi modificata (read-only)
care este semnificatia instructiunii:
delete []p?
- este greşitã;
- şterge memoria alocatã programului;
- elibereazã zona de memorie alocatã stivei;
- elibereazã zona de memorie alocatã tabloului p
elibereaza zona de memorie alocata tabloului p
ce desemneaza in c++ cuvantul rezervat this?
- o referinţã cãtre obiectul curent cu care opereazã o funcţie membru;
- un pointer cãtre obiectul curent cu care opereazã o funcţie membru;
- un pointer la constructorul implicit;
- nu existã
un pointer catre obiectul curent cu care opereaza o functie membru
fie codul de mai jos:
inline int square (int &m)
{
return (mm);
}
inline double square (double &m)
{
return (mm);
}
Care din afirmaţiile de mai jos e cea corectã:
- codul este greşit;
- este incorect folosit inline;
- codul este greşit, dublã definiţie pentru square;
-codul este corect, funcţia square este supraîncarcatã;
- codul este corect, funcţia square este virtualã.
codul este corect , functia square este supraincarcata
parametrii au tipuri diferite: int si double
se considera declaraatiile :
int i, &r_i=i;
alegeti varianta corecta de raspuns:
se defineşte r_i ca fiind un pointer cãtre i;
- se defineşte r_i ca referinţã cãtre int şi este un alias pentru i;
- se defineşte adresa variabilei r_i ca fiind egalã cu i;
- codul este greşit.
se defineste r_i ca fiind referinta catre int si este un alias pentru i
. Fie codul de mai jos
# include <iostream>
class Clasa{
int a,b;
public:
Clasa (int i=0, int j=0) {a=i;b=j;};
};
int main (void ){
Clasa obiect ;
cout << obiect.a<<" " <<obiect.b;
return 0;
}
Care din afirmatiile de mai jos e cea corectã:
- codul este greşit pentru cã nu se defineşte constructorul implicit;
- codul este greşit pentru cã nu se pot afişa componentele a, b;
- codul este greşit deoarece nu se specificã accesul la datele membre a, b;
- codul este corect.</iostream>
codul este gresit pentru ca nu se pot afisa componentele a si b, trebuie supraincarcat operatorul«
Fie codul:
class untip {
private:
int a[3];
public:
int operator [] (int i) {return a[i]};
};
Alegeţi varianta corectã de rãspuns:
- codul este greşit deoarece nu se poate supradefini operatorul [];
- codul este sintactic corect, dar o componentã a vectorului nu poate apare in stinga unei
relatii de atribuire;
- codul este sintactic corect şi o componentã a vectorului poate apare in stinga unei relatii de atribuire;
- codul este greşit deoarece nu s-a scris corect supradefinitia operatorului [].
codul este sintactic corect , dar o componenta a vectorului nu apare in stanga unei relatii de atribuire
care este semnificatia instructiunii:
virtual void f(int a)=0;
- funcţia se initializeaza cu 0;
- instrucţiunea este greşitã;
- instrucţiunea declarã o funcţie pur virtuala;
- instructiunea specificã valoarea implicitã 0 pentru parametrul funcţiei
instructiunea declara o functie pur virtuala
. Fie clasa:
class A {
public:
int x; float y;
A(int n, float f){x=n; y=f;}
}
Fie codul:
A a;
Care din urmatoarele afirmatii despre codul de mai sus e adevarata?
- se apeleaza constructorul implicit al clasei A;
- codul nu se compileaza;
- datele x si y ale obiectului a se intializeaza cu 0;
- datorita faptului ca nu exista destructor declarat explicit, dupa executie, sistemul de operare semnaleaza eroare
la dealocare
codul nu se compileaza , clasa nu are constructor implicit
Fie clasa:
class A {
int x;
A( int n=2 ) { x=n;}
};
Fie codul:
A a(0);
Efectul codului este:
- se construieste obiectul a si se intializeaza x cu 2;
- nu se poate construi obiectul a deoarece constructorul implicit nu e accesibil;
- se construieste obiectul a si se initializeaza x cu 0;
- nu s-a apelat corect constructorul si prin urmare obiectul nu se va construi.
nu se poate construi obiectul deoarece constructorul implicit nu este accesibil
este privat
Fie clasa Complex declarata mai jos:
class Complex{
int x, y;
public:
//aici se introduce prototipul operatorului de
// insertie
Complex(int n=0, int m=0);
};
Supraincarcarea operatorului de insertie (iesire) se face in felul urmator:
- friend ostream operator «_space;(ostream &, complex &);
- friend istream operator «_space;(istream &, complex &);
- friend ostream & operator «_space;(ostream &, complex &);
- friend ostream & operator»_space; (ostream &, complex &);
friend ostream &operator«(ostream &, complex &);
ce este un polimorfism?
- asocierea la “legare tirzie” a obiectului cu tipul potrivit de date;
- asocierea obiectului cu metoda potrivita;
- proprietatea codului de a avea mai multe forme;
- proprietatea datelelor de a se schimba la executie.
asociere la “legarea tarzie “a obiectului cu tipul potrivit de date
Fie codul:
class A{
// declaratii
};
…….
A a, b(2), c(3,2);
cout «_space;c= =(a+b) «_space;endl;
…….
Pentru executia corecta a codului de mai sus este necesara implementarea operatorilor
- «, a operatorului de atribuire, a operatorului de adunare, a operatorului ();
- «, a operatorului de relatie (==), a operatorului de adunare (+);
- «, a operatorului de comparatie (relatie), a operatorului de adunare, a operatorului ();
- «, a operatorului de atribuire, a operatorului de adunare;
«_space;a operatorului de relatie (==), a operatorului de adunare(+);
care dintre afirmatiile de mai jos sunt corecte?
- Daca exista o functie virtuala pura intr-o clasa, atunci clasa din care face parte devine abstractã;
- Functiile prieten se suprascriu la derivare;
- Membrii statici nu se mostenesc;
- Metodele constante au acces la pointerul this.
- daca exista o functie virtuala pura intr-o clasa , atunci clasa din care face parte devine abstracta
- metodele constante au acces la pointerul this
. Fie codul
#include<iostream.h>
#include<conio.h>
class L {
int *pT;
public:
int& operator[](int index){ return pT[index];}
void constr_lin(int c){ pT=new int[c];}
};
class M {
L *pM; int Nl, Nc;
public:
L& operator[](int index) { return pM[index];}
int get_Nl(void){ return Nl;} int get_Nc(void){ return Nc;}
M(int,int);
};
M::M (int nrLin, int nrCol){
Nl=nrLin;Nc=nrCol; pM=new L[Nl];
for(int i=0; i< Nl; i++)
pM[i].constr_lin(Nc);
}
void functie(int NrL, int NrC)
{
M m(NrL, NrC);
for(int i=0,j; i<m.get_Nl();i++){
for (j=0;j<m.get_Nc();j++){
m[i][j]=i*10+j;
cout<<m[i][j]<<" ";
} cout<<"\n"; }
}
int main(void){
functie(3,3);getch();return 0;
}
Codul este:
- incorect sintactic pentru ca nu implementeaza constructor implicit si destructor in clasa L;
- incorect pentru cã nu suprascrie operatorul <<
- corect sintactic dar lasa memorie alocata (orfana);
- corect si fara eroare</conio.h></iostream.h>
corect sintactic dar lasa memorie alocata(orfana)
Fie declaratiile:
const int ci=10;
int *const cp=&ci;
care dintre urmatoarele operatii este permisa?
- ci=1;
- cp=&ci;
- *cp=ci ;
- cp=ci ;
*cp=ci;
Fie functia care interschimbã valorile a douã variabile, definitã ca mai jos :
void sw(int p,int q)
{
int t=p;
p=q ;
q=t ;
}
Fie codul :
void f(int i,int j)
{
//aici se introduce apelul functiei sw
….
}
Apelul functiei sw se face in felul urmator:
- sw(i,j);
- sw(i,j);
- sw(&i,&j);
- sw(p,q);
sw(&i,&j):
. Fie codul:
#include<iostream.h>
int a=1;
void f()
{
int b=1;
static int c=a;
cout<<"a="<<a++ <<"b="<<b++ << "c="<<c++<<'\n';
c=c+2;
}
int main()
{
while(a<4) f() ;
}
Efectul executiei codului de mai sus este:
- a=1 b=1 c=1 a=2 b=2 c=2 a=3 b=3 c=3
- a=1 b=1 c=1 a=2 b=1 c=4 a=3 b=1 c=7
- a=2 b=2 c=2 a=3 b=2 c=3 a=4 b=2 c=4
- a=2 b=2 c=2 a=3 b=3 c=4 a=4 b=4 c=6</iostream.h>
a=1,b=1,c=1
a=2,b=1,c=4
a=3,b=1,c=7
b ia valoarea 1 de fiecare data cand se apeleaza f()
Fie clasa:
class complex
{
double real;
double imag;
public:
complex()
{
real=0;
imag=0;
}
complex(double x,double y=1)
{
real=x;
imag=y;
}
};
Fie declaraţia :
complex z(0);
Efectul codului este :
- Se apeleaza constructorul cu parametri al clasei complex;
- Se apeleaza constructorul implicit al clasei complex;
- Codul nu se compileazã;
- Datele real si imag ale obiectului z se iniţializeaza cu 0
se apeleaza constructorul cu parametri ai clasei complex
Fie codul :
class tab
{
private:
int a[3] ;
public :
int& operator {return a[i];}
};
Alegeţi varianta corectã de rãspuns:
- codul este greşit deoarece nu se poate supradefini operatorul [];
- codul este sintactic corect, dar o componenta a vectorului nu poate aparea în stânga unei relaţii de atribuire;
- codul este sintactic corect si o componentã a vectorului poate apare în stânga unei relaţii de atribuire;
- codul este greşit deoarece nu s-a scris corect supradefinirea operatorului [].
codul este sintactic corect , dar o componenta a vectorului nu poate aparea in stanga unei relatii de atribuire;
fie codul:
class A{
public:
….
void print(ostream &out) const;
…
};
care este efectul adaugarii cuvantului cheie const la sfarsitul fucntiei print?
- codul este greşit deoarece nu s-a declarat corect funcţia print;
- funcţia nu poate modifica parametrul formal out;
- funcţia nu poate modifica obiectul pentru care este apelatã;
- codul este incorect pentru cã nu suprascrie operatorul «.
functia nu poate modifica obiectul pentru ca este apelata
care dintre afirmatiile de mai jos NU este adevarata?
- Functiile virtuale sunt functii membru nestatice;
- Constructorii pot fi functii virtuale;
- Destructorii pot fi functii virtuale;
- Funcţiile friend pot fi funcţii virtuale
constructorii pot fi functii virtuale
. Fie clasa:
class X{
public:
X() {t=0;};
X(X const &);
virtual void f(int)=0;
protected:
int t;
};
şi codul:
X obj;
Care din urmãtoarele afirmaţii despre codul de mai sus este adevarata:
- Se apeleaza constructorul implicit al clasei X ;
- Nu se poate construi obiectul obj deoarece clasa X este o clasa abstractã ;
- Data t a obiectului obj ramâne neiniţializatã deoarece t este membru protected
- Se apeleazã constructorul de copiere al clasei X şi prin urmare se construieşte obiectul obj.
nu se poate construi obiectul obj deoarece clasa X este abstracta
(nu se pot crea obiecte din ea; exista doar pentru a crea baza ierarhiei de clase)
Fie clasa :
class Clasa
{
int a;
double x;
public :
Clasa();
Clasa(int,double);
};
Fie codul :
Clasa Obj;
Clasa *PtrObj ;
PtrObj=new Clasa[10] ;
Care este varianta corectã pentru a elibera zona de memorie alocata pentru vectorul de obiecte al clasei
Clasa :
- delete PtrObj ;
- PtrObj=NULL ;
- Datoritã faptului ca nu exista destructor declarat explicit, nu se poate elibera zona de memorie specificata.
- delete [] PtrObj ;
delete[] PtrObj;
. Fie clasa complex declaratã mai jos:
class complex {
int x, y ;
public:
//aici se introduce prototipul operatorului de extracţie
complex (int n=0, int m=0);
};
Suprascrierea operatorului de extracţie (intrare) se face corect :
- friend ostream & operator «_space;(ostream &, complex &);
- friend istream & operator»_space; (istream &, complex &);
- friend ostream operator»_space; (ostream &, complex &);
- friend istream & operator «_space;(istream &, complex &);
friend istream &operator»(istream &, complex &);
care este diferenta dintre modul de supraincarcare a unui operator binar ca functie membru sau ca functie friend a unei clase?
- Cele douã modalitãţi sunt identice;
- Nu se poate defini un operator ca funcţie membru;
- Nu se poate defini un operator ca funcţie friend;
- Funcţia membru are un parametru în timp ce funcţia friend are doi parametri.
functia membru are un parametru in timp ce functia friend are doi parametri?
fie o clasa de baza B si clasa de derivate D private din B. Cum se mostenesc membri publici ai clasei B in clasa D:
- public
- protected;
- sunt inaccesibili;
- private.
se mostenesc private
pentru ca d deriva private din b
analizati enuntul de mai jos si decideti:
“unei functii oarecare ce asteapta ca argument un obiect de tip clasa de baza B, sau pointer catre B sau referinta catre B i se poate transmite ca parametru efectiv si respectiv si un obict de tip clasa D , derivata din clasa B, pointer catre D sau referinta catre d”
- Afirmaţia este corectã.
- Afirmaţia este incorectã pentru cã nu este valabilã pentru tipul referinţã cãtre D
- Afirmaţia este incorectã pentru cã nu este valabilã pentru tipul pointer cãtre D
- Afirmaţia este complet eronatã.
afirmatia este corecta
Fie declaraţia :
class Cstring
{
char *pv ;
int dim ;
public :
Cstring (int sz) {pv=new char[dim=sz] ;}
~Cstring(){ delete [] pv ;}
} ;
şi funcţia f declaratã astfel :
void f(void)
{
Cstring S1(10) ;
Cstring S2(S1) ;
…………..
}
Care din afirmaţiile de mai jos este corectã :
-Ambele declaraţii sunt incorecte sintactic;
-Declaraţia pentru S2 este incorectã deoarece nu se genereazã automat constructor de copiere ;
-Declaraţia pentru S2 nu este corectã deoarece în acest caz este necesarã definiţia
unui constructor de copiere.
-Ambele declaraţii sunt corecte sintactic şi nu creazã probleme la execuţie
-Declaraţia pentru S2 nu este corectã deoarece în acest caz este necesarã definiţia
unui constructor de copiere.
Fie codul de mai jos:
int sqrt (int &m)
{
return (mm);
}
double sqrt (int &m)
{
return (mm);
}
Care din afirmaţiile de mai jos e cea corectã:
- codul este greşit; este incorectã supraîncãrcarea funcţiei sqrt ;
- codul este greşit sqrt este cuvânt rezervat (cheie);
- codul este corect, funcţia sqrt este supraîncãrcatã;
- codul este corect, funcţia sqrt este virtualã.”
- codul este greşit; este incorectã supraîncãrcarea funcţiei sqrt ;
: ar trebui sa difere tipul param sau nr param
. Ce tip de date returneazã un destructor al unei clase?
-void ;
-pointer cãtre void ;
-un tip de date specificat de programator;-
-nu returneazã nici un tip
-nu returneazã nici un tip.
Care este semnificaţia instrucţiunii:
virtual void f (int a ) = 0 ;
funcţia se iniţializeazã cu 0;
-instrucţiunea este greşitã;
-instrucţiunea declarã o funcţie pur virtualã;
-instrucţiunea specificã valoarea implicitã 0 pentru parametrul funcţiei pur virtuala.
-instrucţiunea specificã valoarea implicitã 0 pentru parametrul funcţiei pur virtuala.
virtual tip nume fct (lista parametric ) =0 – declararea fct pur virtuala
. Analizaţi afirmaţia de mai jos :
“ Accesul la membrii privaţi sau protejaţi ai unui obiect instanţiat dintr-o clasã se poate face prin intermediul
metodelor publice ale clasei cãreia îi aparţine. “
-Afirmaţia este corectã ;
-Afirmaţia este corectã în ceea ce priveşte doar membrii privaţi ;
-Afirmaţia este corectã în ceea ce priveşte doar membrii protejaţi ;
-Afirmaţia este complet eronatã.
-Afirmaţia este corectã ;
Fie codul :
#include <iostream.h>
class baza
{
public :
baza(){cout<< "Constr. baza\n ";}
~baza(){cout<< "Distr. baza\n ";}
};
class deriv :public baza
{
public :
deriv(){cout<< "Constr. deriv ";}
~deriv(){cout<< "Distr. deriv ";}
};
int main(void)
{
deriv obj;
return 0;
}
Ce mesaje se afişeazã la execuţia programului :
-Constr. deriv Constr. baza Distr. deriv Distr. Baza
-Constr. baza Constr. deriv Distr. deriv Distr. Baza
-Constr. baza Constr. deriv Distr. baza Distr. Derive
-Constr. baza Distr. baza Constr. deriv Distr. Derive</iostream.h>
-Constr. baza Constr. deriv Distr. deriv Distr. Baza
Care din proprietãţile de mai jos NU aparţin funcţiilor friend ale unei clase:
funcţiile friend nu se moştenesc prin derivare;
-funcţiile friend au acces la toţi membrii clasei
-funcţiile friend pot fi metode (funcţii membru) ale unei alte clase ;
-funcţiile friend au acces la pointerul this.
funcţiile friend au acces la pointerul this
. #include <conio.h>
#include <iostream.h>
class Baza{
protected:
int Param;
public:
Baza():Param(0) {
cout<<"Constructor implicit Baza!"<<endl;};
virtual ~Baza() {
cout<<"Destructor Baza!"<<endl;};
virtual void Identificare() {
cout<<"Clasa Baza!"<<endl;};
};
class Deriv1: public Baza{
public:
Deriv1() {cout<<"Constructor implicit Deriv1!"<<endl;};
Deriv1(Deriv1 const & Obj) {Param=Obj.Param; cout<<"Constructor de copiere Deriv1!"<<endl;};
~Deriv1() {cout<<"Destructor Deriv1!"<<endl;};
friend istream &operator >> (istream &In, Deriv1 &Obj)
{cout<<"Valoare pentru Param din clasa Deriv1: ";In>>Obj.Param; return In;};
void Identificare() {cout<<"Clasa Deriv1!"<<endl;};
};
class Deriv2: public Baza{
public:
Deriv2() {cout<<"Constructor implicit Deriv2!"<<endl;};
Deriv2(Deriv2 const & Obj) {Param=Obj.Param; cout<<"Constructor de copiere Deriv2!"<<endl;};
~Deriv2() {cout<<"Destructor Deriv2!"<<endl;};
friend istream &operator >> (istream &In, Deriv2 &Obj)
{cout<<"Valoare pentru Param din clasa Deriv2: ";In>>Obj.Param; return In;};
void Identificare() {cout<<"Clasa Deriv2!"<<endl;};
};
int main(int argc, char* argv[])
{
Deriv1 Obj1; Deriv2 Obj2;
cin>>Obj1>>Obj2;
Deriv1 Obj3(Obj1);
Baza Sir[3] = {Obj1, Obj2, Obj3};
for (int contor=0;contor<3;contor++)
Sir[contor].Identificare();
return 0;
}
Datã fiind construcţia de mai sus, care dintre urmãtoarele afirmaţii este adevãratã:
-Programul dã eroare la compilare deoarece nu este supradefinit operatorul =.'
-Construcţia nu ilustreazã polimorfismul
-Rezultatul celor trei apelãri ale funcţiei Identificare este: Clasa Deriv1! Clasa Deriv2! Clasa Deriv1!
-Nu pot exista obiecte de tipul Baza</iostream.h></conio.h>
Construcţia nu ilustreazã polimorfismul
. Fie o clasã cu numele Deriv ce se deriveazã public din clasa de bazã Baza, definitã astfel:
class Baza
{
public:
Baza(){};
virtual ~Baza() { };
virtual void Verificare(char[]) =0;
};
În afarã de membrii proprii, clasa de bazã Baza mai are ca funcţie friend o funcţie numitã Calcul.
Care dintre variantele de prototip al funcţiei Calcul este incorectã:
-friend void Calcul(Baza&);
-friend int Calcul(Baza, int); /* frined tip_returnat nume_fct frined ( lista param) /
-friend int Calcul(Baza&, int);
-friend int Calcul(Baza, int);)
-friend int Calcul(Baza, int); /*
Fie o clasã cu numele Deriv ce nu conţine nici un alt membru (exceptând constructori, destructor) în
afara celor ce se moştenesc prin derivare public din clasa de bazã Baza, definitã astfel:
class Baza
{
protected:
int Param;
public:
Baza():Param(0) {};
virtual ~Baza() {};
};
Care dintre variantele de constructor al clasei derivate Deriv ar genera eroare la compilare:
-Deriv(Deriv const & Obj):Param(Obj.Param) {};
-Deriv(Deriv const & Obj) {Param=Obj.Param;}
-Deriv(Deriv const & Obj) {cout«“Constructor implicit”«endl;};
-Deriv() {Param=5;};
Deriv(Deriv const & Obj):Param(Obj.Param) {};
Baza nu are cnstructor copiere explicit; param nu este membru static sau clasa de baza pentru Deriv.
Fie o clasã cu numele Clasa, de forma:
class Clasa
{
int Valoare;
public:
Clasa(void):Valoare(0) {};
Clasa(Clasa const& Obj):Valoare(Obj.Valoare) {};
Clasa(int const x):Valoare(x) {};
~Clasa() {};
};
În plus clasa Clasa mai poate supraîncãrca o serie de operatori. Care dintre variante este greşitã?
-Clasa operator +(Clasa &Obj){
Clasa Rezultat; Rezultat.Valoare=Valoare+Obj.Valoare;
return Rezultat; };
-Clasa operator +(Clasa &Obj) {
Valoare+=Obj.Valoare;
return *this; };
-friend Clasa operator +(Clasa &Obj1, Clasa &Obj2){
Clasa Rezultat; Rezultat=Obj1.Valoare+Obj2.Valoare;
return Rezultat; };
-friend Clasa operator +(Clasa &Obj1, Clasa &Obj2)
{ Valoare=Obj1.Valoare+Obj2.Valoare;
return *this; };
-friend Clasa operator +(Clasa &Obj1, Clasa &Obj2)
{ Valoare=Obj1.Valoare+Obj2.Valoare;
return *this; };
. Fie o clasã cu numele Clasa, de forma:
#include <iostream.h>
class Clasa
{
int Valoare;
public:
Clasa(void):Valoare(0) {cout<<"Constructor implicit, Clasa!"<<endl;};
Clasa(Clasa const& Obj):Valoare(Obj.Valoare) {cout<<"Constructor de copiere, Clasa!"<<endl;};
Clasa(int const x):Valoare(x) {cout<<"Constructor cu parametri, Clasa!"<<endl;};
~Clasa() {cout<<"Destructor, Clasa!"<<endl;};
friend Clasa operator +(Clasa &Obj1, Clasa &Obj2)
{
Clasa Rezultat;
Rezultat=Obj1.Valoare+Obj2.Valoare;
return Rezultat; };
};
int main(void)
{
Clasa CL1(4),CL2(6),CL3;
CL3=CL1+CL2;
return 0;
}
În urma rulãrii programului, s-a apelat constructorul implicit de CI ori, constructorul de copiere de CC
ori, constructorul cu parametri de CP ori, iar destructorul de D ori. Sã se aleagã varianta corectã.
-CI=2, CC=1, CP=2, D=5
-CI=2, CC=0, CP=2, D=4
-CI=2, CC=1, CP=3, D=6
-CI=2, CC=1, CP=2, D=4 ,</iostream.h>
-CI=2, CC=1, CP=3, D=6