Fie Urmatorul Program
Fie Urmatorul Program
5. #include <iostream.h>
class Cerc{
public:
Cerc(float r):raza(r){}
float getRaza(){return raza;}
Cerc operator++(){raza++;return *this;}// return by value
Cerc& operator--(){raza--;return *this;}// return by reference
private:
float raza;
};
void main(){
Cerc c(1.0);
cout<<(++(++c)).getRaza()<<” ”;
cout<<c.getRaza()<<” ”;
cout<<(--(--c)).getRaza()<<” ”;
cout<<c.getRaza()<<” ”;
}
Programul afiseaza:
a. 3300
b. 3201
c. 3200
d. 3211
7. Fie programul:
#include <iostream.h>
class Cerc{
public:
Cerc(float r):raza(r){}
float getRaza(){return raza;}
Cerc operator++(){raza++;return *this;}// return by value
Cerc operator--(){raza--;return *this;}// return by value
private:
float raza;
};
void main(){
Cerc c(1.0);
cout<<(++(++c)).getRaza()<<” ”;
cout<<c.getRaza()<<” ”;
cout<<(--(--c)).getRaza()<<” ”;
cout<<c.getRaza()<<” ”;
}
Programul afiseaza :
a. 3201
b. 3200
c. 3301
d. 3211
9. Fie programul:
// singleton
// constructor private
#include <iostream.h>
#include <conio.h>
class S{
public:
static S* create()
{
if(i==0){
refS=new S(); i++;
}
return refS;
}
void setName(char *s){name=s;}
char* getName(){return name;}
static int getNr(){return nr;}
private:
static S* refS;
static int i;
static int nr;
S(){nr++;}
char *name;
};
int S::i=0;
int S::nr=0;
S* S::refS=0;
void main(){
S *o1, *o2;
o1=S::create();
o2=S::create();
o1->setName("Matematica");
o2->setName("Informatica");
cout<<o1->getName()<<endl;
cout<<o2->getName()<<endl;
cout<<S::getNr()<<endl;
getch();
}
Programul afiseaza:
a. Matematica Informatica 1
b. Informatica Informatica 1
c. Informatica Informatica 2
d. Matematica Informatica 2
#include <iostream.h>
class C{
public:
C(int n=0, int v[]);
void set(int i, int val){pi[i]=val;}
friend ostream& operator<<(ostream &o, const C&);
private:
int dim;
int *pi;
};
C::C(int n, int v[]) {
dim=n;
pi= v;
}
ostream& operator<<(ostream &o, const C &m){
for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" ";
return o;
}
void main(){
int a[]={1,2,3}, b[]={10,20};
C x(3,a),y(2, b);
x=y;
y.set(0,-1000);
cout<<x<<endl;
}
Programul afiseaza:
a. -100 20
b. -1000 20
c. 100 2 3
d. 1 20 30
int main(){
B *pb;
D d;
// pointing to a subclass
pb=&d;
((D*)pb)->v();
((D*)pb)->st();
return 0;
}
Programul afiseaza:
a. virtual method v() of D
static method st() of D
b. virtual method v() of B
static method st() of D
c. virtual method v() of D
static method st() of B
d. virtual method v() of B
static method st() of B
B Fie programul:
//destructor explicit
#include <string.h>
#include <iostream.h>
class Person{
public:
Person(char *p){name=new char[strlen(p)+1]; strcpy(name,p);}
~Person(){delete[] name;}
private:
char *name;
};
void f(){Person *p =
new Person("Balanescu");
delete p;
// fara aceasta instructiune, obiectele se acumuleaza
// in heap si blocheaza executarea, spre deosebire de Java
}
void main(){
while(1)f();
}
a. La iesirea din functia f(), spatiul alocat pentru sirul de caractere “Balanescu” nu este eliberat si
memoria va fi epuizata
b. La iesirea din functia f(), spatiul alocat pentru sirul de caractere “Balanescu” este eliberat
c. Programul se termina datorita epuizarii memoriei
d. Programul se termina dupa primul apel al functiei f()
private:
char *name;
static long nr;
};
long Person::nr=0;
void f(){Person *p =
new Person("Balanescu");
delete p;
}
void main(){
while(1)f();
}
Care afirmatie este adevarata:
a. Programul afiseaza un sir finit de numere 1 2 3 4...etc. pana memoria este epuizata
b. Programul afiseaza secventa infinita 1 2 3 4...etc. deoarece memoria nu este epuizata
c. Programul nu afiseaza nimic
d. Programul afiseaza 1 apoi se opreste
};
Constructorul Persoana(char *) poate fi utilizat pentru:
a. Conversia obiectelor Persoana in siruri de caractere
b. Conversia sirurilor de caractere in obiecte Persoana
c. Construirea de siruri de caractere
d. Conversia obiectelor Complex in obiecte Persoana
35 Fie urmatoarea specificare de clase:
class Complex;
class Punct{
public:
Punct(float x=0, float y=0):x(x),y(y){}
operator Complex();
operator float(){return x;}
private:
float x,y;
};
class Complex{
public:
Complex(float x=0, float y=0):x(x),y(y){}
operator Punct(){return Punct(x,y);}
operator float(){return x;}
private:
float x,y;
};Metoda Complex:: operator float() este utilizata pentru
a. Conversia unui numar real in obiect Complex
b. Conversia unui obiect Complex in obiect Punct
c. Conversia obiectelor Complex in numere reale
d. Conversia unui obiect punct in obiect Complex
40. Se considera clasa:
#include "iostream.h"
template <class T>
class C{
public:
C(int nrmax=0);
void put(T);
T get();
void remove();
private:
int nrmax;
int nrelem;
int first;
int free;
T* support;
};
template <class T>C<T>::C(int nrmax):nrmax(nrmax){
first=free=nrelem=0;
support = new T [nrmax-1];
}
template <class T> void C<T>::put(T e){
support[free]=e; free= ++free % nrmax; nrelem++;
}
template <class T> T C<T>::get(){
return support[first];
}
template <class T> void C<T>::remove(){
first= ++first % nrmax;
--nrelem;
}
a. Clasa C este o clasa generica
b. Clasa C este o clasa abstracta
c. Clasa C este derivata din clasa T
d. Clasa T este derivata din clasa C
43.1
#include <iostream.h>
class A{
public:
// supraincaracre void s()
void s(){cout<<"void A::s()"<<endl;}
void s(int i){i++;cout<<"void A::s(int)"<<endl; }
// supraincarcare void v()
virtual void v(){cout<<"virtual void A::v()"<<endl;}
virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;}
};
class B:public A{
public:
// 1. supraincarcare metoda statica
int s(){cout<<"int B::s()"<<endl; return 1;}
// 2. specializare metoda statica
void s(int i){i++;cout<<"void B::s(int)"<<endl; }
// 3. specializare metoda virtuala
virtual void v(int i){i++;cout<<"virtual void B::v(int)"<<endl;}
};
//4.supraincarcare metoda virtuala,
virtual void v(){count<<"int B::()"<<endl:return1}
};
44Fie următorul program C++, unde functia abs calculează valoarea absolută a unui număr real:
#include <iostream.h>
void abs(float &x){if (x<0)x=-x;}
void main(){
float a=-1;
abs(a);
cout<<"a="<<a<<endl;
int i=-1;
abs(i); //temporary used for parameter x
cout<<"i="<<i<<endl; // i=-1
}