Documente Academic
Documente Profesional
Documente Cultură
Care afirmatie este adevarata, dacã se face de douã ori click pe butonul stang mouse
asupra butonului Actiune:
a. Programul nu afiºeazã nimic
b. Programul afiºeazã:
1
2
c. Valoarea atributului f.m.x rãmâne mereu la valoarea 0
d. Programul afiºeazã:
0
1
Care afirmatie este adevarata, dacã se face de douã ori click pe butonul stang mouse
asupra butonului Actiune:
a. În câmpul de text f.tf este afiºatã valoarea 1
b. Programul nu afiºeazã nimic
c. În câmpul de text f.tf este afiºatã valoarea 2
d. Valoarea atributului f.m.x rãmâne mereu la valoarea 0
Care afirmatie este adevarata, dacã se face de click pe butonul stang mouse asupra
butonului „modifica” din fereastra fn:
a. Doar in câmpul de text field al ferestrei fo2 este afiºatã valoarea actualizata a
atributului Observator.m.i
b. În câmpul de text field al tuturor ferestrelor este afiºatã valoarea actualizata a
atributului Observator.m.i
c. Doar in câmpul de text field al ferestrei fo1 este afiºatã valoarea actualizata a
atributului Observator.m.i
d. Doar in câmpul de text field al ferestrelor fo1 si fo2 este afiºatã valoarea
actualizata a atributului Observator.m.i
Care afirmatie este adevarata, dacã se face de click pe butonul stang mouse asupra
butonului „modifica” din fereastra fo1 sau fo2:
a. Doar in câmpul de text field al ferestrelor fo1 si fo2 este afiºatã valoarea
actualizata a atributului Observator.m.i
b. În câmpul de text field al tuturor ferestrelor este afiºatã valoarea actualizata a
atributului Observator.m.i
c. Doar in câmpul de text field al ferestrei fo1 este afiºatã valoarea actualizata a
atributului Observator.m.i
d. Doar in câmpul de text field al ferestrei fo2 este afiºatã valoarea actualizata a
atributului Observator.m.i
C++
1. Fie urmatorul program:
// Public redeclarat private
// #include <iostream.h>
class A{
public:
void m(){cout<<"A:m()"<<endl;};
virtual void v(){cout<<"A:v()"<<endl;};
};
class B: public A{
private:
void m(){cout<<"B:m()"<<endl;};
virtual void v(){cout<<"B:v()"<<endl;};
};
void main(){
A a,*p;
B b;
b.m();
b.v();
// obiect de tip A
p=&a; p->m(); p->v();
// obiect de tip B
p=&b; p->m(); p->v();
}
Care expresie este incorecta:
a. b.v();
b. p=&a;
c. p->m();
d. p->v();
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
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
8. 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
9. 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;
};
//LIST.h
#ifndef LIST_H
#define LIST_H
#include "abselem.h"
class LIST{
public:
LIST(int nrmax=0);
void put(AbstractElem *);
AbstractElem* get();
void remove();
private:
int nrmax;
int nrelem;
int first;
int free;
AbstractElem* *support;
};
#endif
//elements.h
#include "abselem.h"
#include "iostream.h"
class Person: public AbstractElem{
public:
Person(char *name);
virtual void display();
virtual void process();
private:
char *name;
};
class Car: public AbstractElem{
public:
Car(char *name);
virtual void display();
virtual void process();
private:
char *name;
};
//driver.cpp
#include "elements.h"
#include "LIST.h"
LIST x(3);
void main(){
x.put(new Person("Tudor"));
x.put(new Person("Andrei"));
x.put(new Car("B-39-TDR"));
x.get()->process(); x.remove();
x.get()->process(); x.remove();
x.get()->process(); x.remove();
}
//LIST.cpp
#include "LIST.h"
LIST::LIST(int nrmax):nrmax(nrmax){
first=free=nrelem=0;
support = new AbstractElem* [nrmax-1];
}
void LIST::put(AbstractElem * pe){
support[free]=pe; free= ++free % nrmax; nrelem++;
}
AbstractElem* LIST::get(){
return support[first];
}
void LIST::remove(){
first= ++first % nrmax;
--nrelem;
}
//elements.cpp
#include "elements.h"
Person::Person(char *name):name(name){};
void Person::display(){cout<<name<<endl;}
void Person::process(){
cout<<"A Person: ";
display();
}
Car::Car(char *name):name(name){};
void Car::display(){cout<<name<<endl;}
void Car::process(){
cout<<"A Car:";
display();
}
#include <iostream.h>
class C{
public:
C(int n=0, int v[]);
void set(int i, int val){pi[i]=val;}
private:
int dim;
int *pi;
};
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 b, *pb;
D d, *pd;
pb=&d;
pb->st();
pb->v();
return 0;
}
Programul afiseaza:
a. static method s() of D
virtual method v() of D
b. static method s() of B
virtual method v() of B
c. static method s() of D
virtual method v() of B
d. static method s() of B
virtual method v() of D
}
Programul afiseaza :
a. 1 6
b. 2 5
c. 2 6
d. 1 5
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
24 Fie programul :
// destructor virtual,
#include <iostream.h>
class B{
public:
virtual ~B(){cout<<"~B()"<<endl;}
};
class D: public B{
public:
virtual ~D(){cout<<"~D()"<<endl;}
};
void main(){
B *pb;
D *pd;
pd= new D();
pb=new D();
delete pb;
delete pd;
}
Programul afiseaza:
a. ~ B()~D()~B() ~D()
b. ~ B() ~B() ~D()
c. ~ B() ~D()
d. ~ D()~B()~D() ~B()
};
class B:public A{
public:
// 1. supraincarcare metoda statica
int s(){cout<<"int B::s()"<
// 2. specializare metoda statica
void s(int i){i++;cout<<"void B::s(int)"<
void main(){
A *pa;
B b;
pa=&b; pa->s(); pa->v(1);
}
Prin executarea sa, programul afiseaza:
a) void B::v()
void A::v(int)
b) void A::v()
void B::v(int)
c) void A::s()
void B::v(int)
d) void A::v()
void A::v(int)
28. Fie următorul program C++, în care operatorul de insertie << este supraîncărcat.
Operatorul de atribuire = este cel predefinit, cu semantica prin referinta.
#include <iostream.h>
class C{
public:
C(int n, 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= new int[dim];
for(int j=0; j<dim; j++){pi[j]=v[j];}
}
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);
cout<<(x=y)<<endl;
y.set(0,1000);
cout<<x<<endl;
}
Care din afirmatiile următoare sunt adevărate:
a. Programul afisează:
10 20
10 20
b. Programul afisează:
10 20
1000 20
c. Programul afisează:
1000 20
10 20
d. Programul afisează:
1000 20
1000 20
29. Fie următorul program C++, în care operatorul de insertie << si operatorul de atribuire =
sunt
supraîncărcati.
Prin supraîncărcare, operatorul de atribuire are semantica prin valoare (el înlocuieste pe cel
predefinit, care are semantica prin referintă). Rersursele obiectului destinatie d din expresia d=s
sunt eliberate chiar si în cazul de autoatribure d=d.
#include <iostream.h>
class C{
public:
C(int n, int v[]);
void set(int i, int val){pi[i]=val;}
C& operator=(C&);
friend ostream& operator<<(ostream &o, const C&);
private:
int dim;
int *pi;
};
C::C(int n, int v[]) {
dim=n;
pi= new int[dim];
for(int j=0; j<dim; j++){pi[j]=v[j];}
}
// supraincarcare cu semantica prin valoare
C& C::operator=(C& x){
// incepe prin dezalocare resursa *pi
// fara verificarea cazului de autoatribuire d=d
delete[] pi;
dim=x.dim;
pi=new int[dim];
for(int j=0; j<dim; j++){pi[j]=x.pi[j];}
return *this;
}
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);
cout<<(x=y)<<endl;
y.set(0,1000);
cout<<x<<endl;
cout<<(x=x)<<endl;
}
În afirmatiile de mai jos, xx si yy sunt valori arbitrare, rezultate prin referirea prin pointerul pi la o
zona de memorie *pi neinitializată
Care din afirmatiile următoare sunt adevărate:
a. Programul afisează:
10 20
10 20
xx yy
b. a) Programul afisează:
10 20
1000 20
xx yy
c. Programul afisează:
1000 20
10 20
xx yy
d. Programul afisează:
10 20
10 20
10 20
În afirmatiile de mai jos, xx si yy sunt valori arbitrare, rezultate prin referirea prin pointerul pi la o
zona de memorie *pi neinitializată
Care din afirmatiile următoare sunt adevărate:
a. Programul afisează:
10 20
10 20
xx yy
b. Programul afisează:
10 20
1000 20
xx yy
c. Programul afisează:
1000 20
10 20
xx yy
d. Programul afisează:
10 20
10 20
10 20
31. Fie 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
}
46. Care este varianta corecta de completare a urmatoarei specificari (incomplete ) a clasei
Data
#include <iostream.h>
class Data{
public:
// metode si operatori
private:
int zi,luna, an;
};
astfel incat programul urmator
void main(){
Data d, e(31,12,2002);
cout<<d<<" "<<e<<endl;
}
sa afiseze rezultatele:
1/1/2001 31/12/2002
a. dupa comentariul metode si operatori, se adauga:
Data(int zi=1, int luna=1, int an=2001);
friend ostream& operator<<(ostream&, Date &);
b. dupa comentariul metode si operatori, se adauga:
Data(int zi=31, char *luna=”XII”, int an=2002);
friend ostream& operator<<(ostream&, Date &);
c. dupa comentariul metode si operatori, se adauga:
Data(int zi=31, int luna=12, int an=2002);
friend ostream& operator<<(ostream&, Date &);
d. dupa comentariul metode si operatori, se adauga:
Data(int zi=1, int luna=1, int an=2001);
ostream& operator<<(ostream&, Date &);
47. Fie următorul program C++, unde funcŃia 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
}
La compilare a fost emis următorul mesaj de avertizare:
Warning: temporary used for parameter ‘x’ in call to ‘abs(float &)
Care din afirmaŃiile următoare sunt adevărate:
a. Programul afisează:
a =1
i = -1
b. Programul afisează:
a =1
i=1
c. Programul afisează:
a = -1
i = -1
d. Programul afisează:
a = -1
i=1
Metoda Punct:: operator Complex() nu a fost implementat inline, precum operator Punct()
deoarece
a. Construcorul Complex(float, float) trebuie declarat inaintea metodei Punct:: operator Complex()
b. Constructorul Punct (float, float) trebuie declarat inaintea metodei Punct:: operator Complex()
c. Este metoda friend a clasei Complex ????
d. Este metoda friend a clasei Punct
54. Fie programul:
// file Calc.h
class Calculator{
private:
int value;
int keep;
char toDo;
public:
void add();
void multiply();
void compute();
void clear();
void digit (int x);
int display();
Calculator();
};
//file Calc.cpp
#include "Calc.h"
void Calculator::clear(){
value=keep=0;
}
int Calculator::display(){ return value;}
void Calculator::digit(int x){value=value*10+x;}
void Calculator::add(){
keep=value; //keep first operand
value=0; //get ready for the second operand
toDo='+'; // what to do later
}
void Calculator::multiply(){
keep=value; //keep first operand
value=0; //get ready for the second operand
toDo='*'; // what to do later
}
void Calculator::compute(){
if (toDo=='+') value += keep;
else if (toDo == '*') value *= keep;
}
Calculator::Calculator(){clear();}
//file testdriver.cpp
#include <iostream.h>
#include "Calc.h"
void main(){
Calculator c;
c.digit(1);c.digit(0);
c.add();
c.digit(2);c.digit(0);
c.compute();
c.add();
c.digit(5);
c.compute();
cout<<c.display()<<endl;
c.clear();
c.digit(1);c.digit(0);
c.multiply();
c.digit(2);c.digit(0);
c.compute();
c.add();
c.digit(5);
c.compute();
cout<<c.display()<<endl;
};
Programul afiseaza
a. 35 205
b.10 20
c. 205 35
d. 20 10
private:
int nrmax;
int nrelem;
int first;
int free;
T* support;
};
class Person {
public:
Person(char *name);
Person(); //necesar pentru a intializa tablouri
virtual void display();
virtual void process();
private:
char *name;
};
class Car {
public:
Car(char *name);
Car();
virtual void display();
virtual void process();
private:
char *name;
};
Person::Person(char *name):name(name){};
Person::Person(){};
void Person::display(){cout<<name<<endl;}
void Person::process(){
cout<<"A Person: ";
display();
}
Car::Car(char *name):name(name){};
Car::Car(){};
void Car::display(){cout<<name<<endl;}
void Car::process(){
cout<<"A Car:";
display();
}
Fifo<Person> queuePerson(3);
Fifo<Car> queueCar(3);
void main(){
queuePerson.put(Person("Andrei"));
queuePerson.put(Person("Tudor"));
queueCar.put(Car("B-39-TDR"));
queuePerson.get().process(); queuePerson.remove();
queueCar.get().process(); queueCar.remove();
queuePerson.get().process(); queuePerson.remove();
}
Programul afiseaza:
a. A Person: Andrei
A Car:B-39-TDR
A Person: Tudor
b.
c.
d.
56.Fie programul
// constructor de copiere atat in clasa de baza cat si in clasa derivata
// constructorul de copiere din clasa derivata utilizeaza pe B() pentru
constructia // // subobiectului B
#include <iostream.h>
class B{
public:
B(){cout<<"B()"<<endl;}
B(B &b){cout<<"B(B &b)"<<endl;}
};
class D: public B{
public:
D(){cout<<"D()"<<endl;}
D(D &d){cout<<"D(D &d)"<<endl;}
};
void main(){
B b; // apel B()
B b1(b); // apel B(B & ); nu se mai utilizeaza B()!
D d; // apel B();D()
D d1(d); // nu se apeleaza B(B &b)
}
Programul afiseaza :
a. B() B(B&b) B() D() B(B &b) D(D &d)
b. B() B(B&b) B() D() B() D(D &d)
c. B() B() B(B&b) B() D() B(B &b) D() B(B &b)
d. B() B(B&b) D() B(B &b) D() B(B &b)
Programul afiseaza:
a. -100 2 3
b. 1 2 3
c. 100 2 3
d. 1 20 30
JAVA
1- A ,2-B ,3-C ,4-A ,5-D ,6-B ,7-C ,8-A ,9-B ,10-A ,11-B ,12-C ,13-D ,14-A ,15-B,
16-C ,17-D ,18-B ,19-C ,20-B ,21-C ,22-D ,23-A
C++
1-A, 2-D, 3-D, 4-A, 5-C, 6-?, 7-A, 8-B, 9-A, 10-A, 11-D, 12-B, 13-A, 14-D, 15-?, 16-C,
17-B, 18-A, 19-E, 20-B, 21-A, 22-A, 23-?, 24-D, 25-C, 26A, 27-D, 28-B, 29-A, 30-D,
31-A, 32-D, 33-A, 34-B, 35-A, 36-C, 37-D, 38-C, 39-B, 40-B, 41-C, 42-A, 43-C, 44-C,
45-A, 46-A, 47-A, 48-D, 49-A, 50-C, 51-B, 52-C, 53-A,B?, 54-A, 55-A, 56-B, 57-A, 58-
A, 59-B 60-C, 61-D, 62-C, 63-A