Sunteți pe pagina 1din 6

E X A M E N PII Set 3 A

1) Fie clasa:

class Complex
{ double re,im;
public:
friend double real(Complex &);
friend double imag(Complex &);
friend Complex conj(Complex &);

Complex(): re(0), im(0) { }


Complex(double r, double i): re(r), im(i) { }
Complex operator+(Complex &);
Complex operator-(Complex &);
Complex& operator=(Complex &);
int operator==(Complex &);
double operator!(void);
void operator~(void);
};

Care din următoarele afirmaţii sunt corecte ?

a) Funcţiile real(), imag() şi conj() sunt metode ale clasei complex;


b) Funcţiile real(), imag() şi conj() sunt funcţii globale;
c) Funcţiile real(), imag() şi conj() aparţin altei clase;
d) Declaraţia clasei Complex conţine erori de sintaxă.

1
2) Se dă următorul cod:

#include <iostream>
using namespace std;
#include <stdlib.h>
#include <conio.h>

class stiva_de_int
{
int sp,dim, *vector;
public:
stiva_de_int( );
~stiva_de_int() { if(vector != NULL) delete vector; }
void push(int);
int pop();
int top() { return vector[sp]; }
};

stiva_de_int::stiva_de_int()
{
sp = -1;
const int dim = 10;
vector = new int[dim];
}

void stiva_de_int::push(int nr)


{
if(sp < dim-1)
vector[++sp] = nr;
else {
cout << "\n Stiva este plina\n"; exit(1);
}
}
int stiva_de_int::pop()
{
if(sp < 0)
return(cout<< "\nStiva este goala\n",0);
else
return vector[sp--];
}

void main() { _getch();}

În privinţa acestui cod se fac următoarele afirmaţii:

P1) Nu există erori de sintaxă;


P2) Membrul dim al clasei nu este iniţializat;
P3) Variabila dim din constructor are ca domeniu doar constructorul;
P4) Metoda push() se execută corect.

Care din aceste afirmaţii sunt corecte ?


a) Numai P1; b) Numai P2 cu P3; c) Numai P1, P2 şi P3; d) Toate.

2
3) Se dă următorul cod:

#include <iostream>
using namespace std;

class X
{ int a, b;
public:
X(int a1, int b1):a(a1), b(b1) { }
int geta() { return a; }
int getb() { return b; }
X operator+(X &x) {return X(a + x.a, b + x.b); }
};

int operator!(X px)


{ return (px.geta() + px.getb());}

int main()
{
X x1(4,2), x2(2,3);
X z = x1 + x2;
cout << z.geta() << " " << z.getb();
X *pz = &z;
int i = !(*pz);
cout << " " << i << "\n\n"; return 0;
}

Ce puteţi spune despre program?


a) Este corect şi după execuţia lui pe ecran apare: 6 5 11
b) Supraîncărcarea operatorului + este greşită;
c) Supraîncărcarea operatorului ! este greşită;
d) Funcţia main() nu este corectă.

3
4)
Se dă clasa "un_int_mic", cinci variante de supraîncărcare a funcţiei fct(),
numerotate la dreapta, în comentariu şi trei declaraţii de variabile.
Se mai dau şi cinci apeluri de funcţie numerotate şi ele, dar la stânga.

Cum rezolvă algoritmul de asortare (potrivire) aceste apeluri?

class un_int_mic { int a; } ;

void fct(unsigned char ,un_int_mic ); //1


void fct(int ,char ); //2
void fct(double ,char ); //3
void fct(char ,int ); //4
void fct(un_int_mic,long ); //5

un_int_mic im;
long iM;
char cc;

a1) fct(iM,cc);
a2) fct(iM, im);
a3) fct(im, cc);
a4) fct(cc, cc);
a5) fct(im, iM);

a) a1 alege 2; a2 alege 1; a3 alege 5; a4 - ambiguitate; a5 - 5

b) a1 alege 3; a2 alege 1; a3 alege 5; a4 - ambiguitate; a5 – 5

c) a1 alege 4; a2 alege 1; a3 alege 5; a4 - alege 3; a5 - 5

d) a1 alege 3; a2 alege 1; a3 alege 5; a4 - alege 2; a5 – 5

4
5) Se dă următorul program:
#include<iostream>
#include<string.h>
using namespace std;
#pragma warning(disable:4996)

class Student
{
char *nume;
public:
Student(char* n);
Student(const Student&);
~Student();
char* getnume() { return nume;}
Student& operator=(const Student &);
};

Student::Student(char* n)
{
nume = new char[strlen(n)+1];
strcpy(nume,n);
}
Student::Student(const Student& s)
{
nume = new char[strlen(s.nume)+1];
strcpy(nume,s.nume);
}
Student::~Student()
{
if(nume != NULL)
delete nume;
}
Student& Student::operator=(const Student &s)
{
memcpy(nume,s.nume,sizeof(strlen(s.nume)+1));
return *this;
}

int main(void)
{
Student s1("Popescu Ion");
Student s2("Ionescu Mihai");
cout<<s1.getnume()<<endl;
cout<<s2.getnume()<<endl;
s1 = s2;
cout<<s1.getnume()<<endl;
return 0;
}

5
După execuţia programului, pe ecranul monitorului apare:
a) b) c)
Popescu Ion Popescu Ion Popescu Ion
Ionescu Mihai Ionescu Mihai Ionescu Mihai
Ionescu Mihai Ionescu Ion
d)
Nimic, pentru ca exista erori de sintaxă.

6) Ce puteţi spune despre următorul program:


#include<iostream>
using namespace std;

class CTestA
{
public:
virtual void f(){cout << "A::f()" << " ";}
};
class CTestB :public CTestA
{
public:
void f() {cout << "B::f()" << " ";}
void g() {cout << "B::g()" << " ";}
};

class CTestC :public CTestB


{
public:
void f() {cout << "C::f()" << " ";}
void g() {cout << "C::g()" << " ";}
void h() {cout << "C::h()" << " ";}
};

void main()
{
CTestA *pAa = new CTestA;
CTestA *pAb = new CTestB;
CTestA *pAc = new CTestC;
pAa->f(); pAb->f(); pAb->g();
pAc->f(); pAc->g(); pAc->h();
}

a) Programul este corect şi după execuţie, pe ecran apare:


A::f() B::f() B::g() C::f() C::g() C::h()
b) Programul este corect şi după execuţie, pe ecran apare:
A::f() B::f() A::f() C::f() A::f() A::f()
c) Programul este corect şi după execuţie, pe ecran apare:
A::f() B::f() C::f()
d) Există erori căci funcţiile g şi h nu aparţin clasei de bază.

S-ar putea să vă placă și