0% found this document useful (0 votes)
257 views

Ppoo

The document contains 13 programming examples related to C++ classes and inheritance. Some key points covered include: 1) Redeclaring public members as private in a derived class makes them inaccessible. Virtual functions call the implementation in the most derived class. 2) Static and virtual functions are called based on the actual object type when using polymorphism through base class pointers. 3) Destructors are called in reverse order of constructor calls when deleting objects. Virtual destructors ensure the correct destructor is called. 4) Copy constructors can be implicitly defined to copy base class members if not defined in the derived class. Operator overloading and references affect copy semantics.

Uploaded by

Andrei Badescu
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
257 views

Ppoo

The document contains 13 programming examples related to C++ classes and inheritance. Some key points covered include: 1) Redeclaring public members as private in a derived class makes them inaccessible. Virtual functions call the implementation in the most derived class. 2) Static and virtual functions are called based on the actual object type when using polymorphism through base class pointers. 3) Destructors are called in reverse order of constructor calls when deleting objects. Virtual destructors ensure the correct destructor is called. 4) Copy constructors can be implicitly defined to copy base class members if not defined in the derived class. Operator overloading and references affect copy semantics.

Uploaded by

Andrei Badescu
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 44

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;
a.m(); //A:m
b.m(); //incorecta
b.v(); //incorecta
// obiect de tip A
p=&a;
p->m(); //A:m()
p->v(); //A:v()
// obiect de tip B
p=&b;
p->v();//B:v()
p->m();//A:m()
}
2. Fie programul:
#include <iostream.h>
class B{
public:
void st(){cout<< "static method st() of B"<<endl;}
virtual void v(){cout<< "virtual method v() of B"<<endl;}
};
class D: public B{
public:
void st(){cout<< "static method st() of D"<<endl;}
virtual void v(){cout<< " virtual method v() of D"<<endl;}
};
int main(){
B *pb;
D d;
// pointing to a subclass
pb=&d;
((D*)pb)->v(); // virtual method v() of D
((D*)pb)->st(); // static method st() of D
return 0;
}
3. Fie programul:
#include <iostream.h>
class B{
public:
void st(){cout<< "static method st() of B"<<endl;}
virtual void v(){cout<< "virtual method v() of B"<<endl;}
};
class D: public B{
public:
void st(){cout<< "static method st() of D"<<endl;}
virtual void v(){cout<< " virtual method v() of D"<<endl;}
};

int main(){
B b, *pb;
D d, *pd;
pb=&b;
pb->st(); // static method st() of B
pb->v(); // virtual method v() of B
pb=&d;
pb->st(); // static method st() of B
pb->v(); // virtual method v() of D
return 0;
}
4. 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. 3 2 0 1 (fara &)
b. 3 2 0 0 (cu &)
c. 3 3 1 2 (cu &)
5. Fie urmatorul program, in care se utilizeaza clase abstracte:
// abselem.h
#ifndef ABSTRACTELEM_H
#define ABSTRACTELEM_H
class AbstractElem{
public:
virtual void display()=0;
virtual void process()=0;
};
#endif
//fifo.h
#ifndef FIFO_H
#define FIFO_H
#include "abselem.h"
class Fifo{
public:
Fifo(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 "fifo.h"
Fifo queue(3);
void main(){
queue.put(new Person("Tudor"));
queue.put(new Person("Andrei"));
queue.put(new Car("B-39-TDR"));
queue.get()->process(); queue.remove();
queue.get()->process(); queue.remove();
queue.get()->process(); queue.remove();
}
//fifo.cpp //sau LIST.cpp
#include "fifo.h"
Fifo::Fifo(int nrmax):nrmax(nrmax){
first=free=nrelem=0;
support = new AbstractElem* [nrmax-1];
}
void Fifo::put(AbstractElem * pe){
support[free]=pe; free= ++free % nrmax; nrelem++;
}
AbstractElem* Fifo::get(){
return support[first];
}
void Fifo::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();
}
Programul afiseaza datele in ordinea:
a. Tudor Andrei B-39-TDR
6. Fie urmatorul program, in care se utilizeaza clase abstracte:
#include "iostream.h"
template <class T>
class Fifo{
public:
Fifo(int nrmax=0);
void put(T);
T get();
void remove();
private:
int nrmax;
int nrelem;
int first;
int free;
T* support;
};
template <class T>Fifo<T>::Fifo(int nrmax):nrmax(nrmax){
first=free=nrelem=0;
support = new T [nrmax-1];
}
template <class T> void Fifo<T>::put(T e){
support[free]=e; free= ++free % nrmax; nrelem++;
}
template <class T> T Fifo<T>::get(){
return support[first];
}
template <class T> void Fifo<T>::remove(){
first= ++first % nrmax;
--nrelem;
}
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(){
[u]queuePerson.put(Person("Andrei"));
queuePerson.put(Person("Tudor"));
queueCar.put(Car("B-39-TDR"));[/u]
queuePerson.get().process(); queuePerson.remove();
queueCar.get().process(); queueCar.remove();
queuePerson.get().process(); queuePerson.remove();
}
Programul afiseaza:
A Person: Andrei
A Car:B-39-TDR
A Person: Tudor

7. 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
8. Fie programul:
// destructor static,
#include <iostream.h>
class B{
public:
~B(){cout<<"~B()"<<endl;}
};
class D: public B{
public:
~D(){cout<<"~D()"<<endl;}
};
void main(){
clrscr();//<conio.h>
B *pb;
D *pd;
pd= new D();
pb=new D();
delete pb;
delete pd;
}
Programul afiseaza :
~ B() ~D() ~B()
9. Fie programul:
// destructor static
#include <iostream.h>
#include <conio.h>
class B{
public:
B(){cout<<"B()"<<endl;}
~B(){cout<<"~B()"<<endl;}
};
class D: public B{
public:
D(){cout<<"D()"<<endl;}
~D(){cout<<"~D()"<<endl;}
};
void main(){
clrscr();
B *b=new B(); //apel D()
delete b;
b=new D(); //apel B(), D()
delete b;
}
Programul afiseaza :
B() ~B() B() D() ~B()
10. 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();
//pd = new B(); //error "Cannot convert 'B*' to 'D*' in function main()"
delete pb;
delete pd;
}
Programul afiseaza:
~ D()~B()~D() ~B()
11. Fie programul :
// constructor de copiere in clasa de baza; dar absent in clasa derivata
// compilatorul creeaza un constructor de copiere implicit
// care apeleaza constr de copiere al clasei de baza pentru copierea atributelor din clasa de
baza
// si copiaza membru cu membru atributele din D
#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;}
};
void main(){
B b; // apel B() // B()
B b1(b); // apel B(B & ); nu se mai utilizeaza B()! //B(B&b)
D d; // apel B();D() // B() D()
D d1(d); // B(B &b)
B bd(d); // conversie implicita la clasa de baza; // B(B &b)
getch();
}
B() B(B &b) B() D() B(B &b) B(B &b)

12. Fie urmatorul program:


// Constructor cu semantica prin referinta
// Operatorul = este cel implicit
#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:
-1000 20
12bis. Fie urmatorul program:
// Constructor cu semantica prin referinta
// Operatorul = este cel implicit
#include <iostream.h>
class C{
public:
C(int n=0, int v[]);
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);
a[0]= -100;
cout<<x<<endl;
}
Programul afiseaza:
-100 2 3
13. Fie programul :
// Constructor cu semantica prin referinta
// Operatorul = cu semantica prin valoare si stergere destinatie
#include <iostream.h>
class C{
public:
C(int n=0, int v[]);
C& C::operator=(C& x);
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;
}
C& C::operator=(C& x){
// stergerea valorior din vectorul destinatie, care oricum vor fi modificate
delete[] pi;
// atribuire
dim=x.dim;
pi=new int[dim];
for(int j=0; j<dim; j++){pi[j]=x.pi[j];}
return *this;
}
void main(){
int a[]={1,2,3}, b[]={10,20};
C x(3,a),y(2, b);
x=y ;
b[0]=-1000;
cout<<x<<endl;
}

Programul afiseaza
10 25
14. Fie urmatorul program:
// Constructor cu semantica prin referinta
// Operatorul = este cel implicit
#include <iostream.h>
class C{
public: C(int n=0, int v[]);
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);
a[0]=-100;
cout<<(x=y)<<endl;
}
Programul afiseaza:
10 20
15.Fie urmatorul program C++, în care operatorul de insertie << este supraîncarcat.
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 urmatoare sunt adevarate:
Programul afiseaza:
10 20
1000 20
16. Fie urmatorul program C++, în care operatorul de insertie << si operatorul de
atribuire = sunt supraîncarcati. Prin supraîncarcare, operatorul de atribuire are semantica
prin valoare (el înlocuieste pe cel predefinit, care are semantica prin referinta).
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 neinitializata
Care din afirmatiile urmatoare sunt adevarate:
Programul afiseaza:
10 20
10 20
xx yy
17. Fie urmatorul program C++, în care operatorul de insertie << si operatorul de
atribuire = sunt supraîncarcati. Prin supraîncarcare, operatorul de atribuire are semantica
prin valoare (el înlocuieste pe cel predefinit, care are semantica prin referinta).
Rersursele obiectului destinatie d din expresia d=s sunt eliberate numai daca d?s.
#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];}
}
C& C::operator=(C& x){
// incepe prin dezalocare resursa *pi
// numai daca destinatia difera de sursa
if(this!=&x){
dim=x.dim;
delete[] pi;
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 neinitializata
Care din afirmatiile urmatoare sunt adevarate:
Programul afiseaza:
10 20
10 20
10 20
18. Fie programul
#include <string.h>
#include <iostream.h>
class Person{
public: Person(char *p){
nr=0;
name=new char[strlen(p)+1];
strcpy(name,p);
nr++;
cout<<nr<<endl;
}
~Person(){
delete[] name;
}
private: char *name; long nr;
};
void f(){
Person *p = new Person("Balanescu");
delete p;
}
void main(){
for (int i=0; i<5; i++)f();
}
Programul afiseaza:
11111

19. Fie programul


//static atribut
#include <conio.h>
#include <string.h>
#include <iostream.h>
class Person{
public:
Person(char *p){name=new char[strlen(p)+1]; strcpy(name,p);
nr++; cout<<nr<<endl;
}
~Person(){nr--; delete[] name;}
private:
char *name;
static long nr;
};
long Person::nr=0;
void f(){Person *p =
new Person("Balanescu");
}
void main(){
for (int i=0; i<5; i++)f();
getch();
}
Programul afiseaza:
12345
20. Fie programul:
#include <string.h>
#include <iostream.h>
class Person{
public:
Person(char *p){name=new char[strlen(p)+1]; strcpy(name,p);
nr++; cout<<nr<<endl;
}

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:
Programul afiseaza un sir finit de numere 1 2 3 4...etc. pana memoria este epuizata
21.Fie urmatorul program C++:
#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(){
// obiect nou, alocare dinamica in memoria heap
Person *p =new Person("Balanescu");
delete p;
}
void main(){
while(1)f();
}
Care din afirmatiile urmatoare sunt adevarate:
Programul nu se termina, deoarece conditia de continuare din instructiunea while
este mereu îndeplinita
22.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();
}
Care din afirmatiile urmatoare sunt adevarate:
La iesirea din functia f(), spatiul alocat pentru sirul de caractere “Balanescu” este eliberat
23. Fie urmatorul program:
#include <iostream.h>
class A{
public:

void s(){cout<<"void A::s()"<<endl;}


void s(int i){i++;cout<<"void A::s(int)"<<endl; }
virtual void v(){cout<<"virtual void A::v()"<<endl;}
virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;}
};
Care afirmatie este corecta:
Definitia virtual void v()supraincarca definitia virtual void v(int i)
24. Fie programul :
#include <iostream.h>
class Cerc{
public:
Cerc(float r):raza(r){}
float getRaza(){return raza;}
void operator++(){raza++;}
private:
float raza;
};
class Cilindru: public Cerc{
public:
Cilindru(float raza, float inaltime):Cerc(raza), inaltime(inaltime){};
void operator++(){inaltime++;}
float getInaltime(){return inaltime;}
private:
float inaltime;
};
void main(){
Cerc *pc;
Cilindru c(1,5);
pc=&c;
++ *pc;
cout<<pc->getRaza()<<" "<<c.getInaltime()<<endl;
getch();
}
Programul afiseaza :
2 5
25. Fie programul:
class Persoana{
public:
Persoana(char * n){nume=n;}
void afisare(){cout<<nume<<endl;}
char *nume;

};
Constructorul Persoana(char *) poate fi utilizat pentru:
Conversia sirurilor de caractere in obiecte Persoana
26. 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 Complex();
operator float(){return x;}
private:
float x,y;
};
Metoda Complex: operator float() este utilizata pentru:
Conversia unui obiect Complex in obiect Punct ¿
27. 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
Conversia unui obiect punct in obiect complex
28. Fie urmatoarea specificare de clasa:
// file abslist.h
#ifndef ABSLIST_H
#define ABSLIST_H
#include “d:tudor\c_cpp\abstract\abselem.h”
class AbstractList{
public:
virtual void erase()==0;
virtual void put(AbstractElem*ae){};
virtual AbstractElem*get(){};
virtual int isEmpty(){};
virtual int isFull(){};
};
#endif;
Care afirmatie este corecta:
AbstractList este o clasa abstracta
29. Fie urmatorul program:
#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;}
};
void main(){
A *pa;
B b;
pa=&b; pa->s(); pa->v(1);
}

Prin executarea sa, programul afiseaza:


void A::s()
void B::v(int)
void A::s()
virtual void B::v()int
30. Fie urmatorul program C++:
#include <iostream.h>
class A{
public:
void s(){cout<<"void A::s()"<<endl;}
void s(int i){i++;cout<<"void A::s(int i)"<<endl; }
virtual void v(){cout<<"virtual void A::v()"<<endl;}
virtual void v(int i){
i++;cout<<"virtual void A::v()"<<endl;
}
};
class B:public A{
public:
// 1.
int s(){
cout<<"int B::s()"<<endl;
return 1;
}
// 2.
void s(int i){
i++;cout<<"void B::s(int i)"<<endl;
}
// 3.
virtual void v(int i){
i++;cout<<"virtual void B::v()"<<endl;
}
// 4.
virtual int v(){
cout<<"int B::v()"<<endl; return 1;
}
};
Care din afirmatiile urmatoare sunt adevarate:
//4. este incorecta
31.Fie urmatorul program, in care se utilizeaza clase abstracte:
// abselem.h
#ifndef ABSTRACTELEM_H
#define ABSTRACTELEM_H
class AbstractElem{
public:
virtual void display()=0;
virtual void process()=0;
};
#endif
//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
//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;
} Care afirmatie este adevarata:
List este o structura de date de tip coada
32. 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;
}
Clasa C defineste o structura de tip coada (FIFO)
33. Fie urmatorul program C++, unde functia abs calculeaza valoarea absoluta a unui
numar 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 urmatorul mesaj de avertizare:
Warning: temporary used for parameter ‘x’ in call to ‘abs(float &)
Care din afirmatiile urmatoare sunt adevarate:
Programul afiseaza:
a =1
i = -1
34. Fie urmatorul program C++:
#include <iostream.h>
class Punct{
public:
Punct(int=0, int=0); //constructor
protected:
int x,y;
friend ostream& operator<<(ostream&, const Punct&);
};
class Cerc: public Punct{
public:
Cerc(double r=0.0, int x=0, int y=0);// constructor
protected:
float raza;
friend ostream& operator<<(ostream&, const Cerc&);
};
//implementare Punct
Punct::Punct(int a, int b):x(a),y(b){} // constructor
ostream& operator<<(ostream& output, const Punct& p){
output<<"Punct"<<'['<<p.x<<", "<<p.y<< ']';
return output;
}
//implementare Cerc
Cerc::Cerc(double r, int a, int b):Punct(a,b), raza(r){}
ostream& operator<<(ostream& output, const Cerc& c){
output <<"Centru= "<< (Punct)(c)
<<"; Raza= "<<c.raza;
return output;
};
void main(){
Punct *punctPtr=0, p(30,50);
Cerc *cercPtr=0, c(2.7,120,89);
cout<<p<<endl;
cout<<c<<endl;
// Cerc tratat ca Punct (prin pointer la clasa de baza):
punctPtr=&c;
cout<< *punctPtr << endl;
/* Cerc tratat ca Cerc (prin pointer la clasa de baza, dar
cu conversie explicita de la Punct la clasa derivata Cerc
*/
cercPtr= (Cerc *)(punctPtr);
cout<< *cercPtr<<endl;
/*Punct tratat ca Cerc: programatorul isi asuma responsabilitatea
unor erori: anumite atribute sunt nedefinite
*/
punctPtr= &p; // punctPtr refera un Punct
//Urmeaza conversie asumata de programator,
//de la clasa de baza la clasa derivata
cercPtr=(Cerc *)(punctPtr);
// cercPtr refera p ca pe un cerc
//dar acest asa-zis cerc are raza nedefinita
cout<< *cercPtr <<endl;
}
Prin xx este desemnata o valoare nedefinita.
Care din afirmatiile urmatoare sunt adevarate:
Programul afiseaza:
Punct[30,50]
Centru=Punct[120,89]; Raza=2.7
Punct[120,89]
Centru=Punct[120,89]; Raza=2.7
Centru=Punct[30,50]; Raza=xx
35. Fie urmatorul program C++:
#include <iostream.h>
class Persoana{
public:
Persoana(char * n){nume=n;}
void afisare(){cout<<nume<<endl;}
char *nume;
};
Persoana q="Balanescu";
void fvalue(Persoana p){p.afisare();}
void faddress(Persoana *p){p->afisare();}
void freference(Persoana &p){p.afisare();}
void main(){
fvalue(q);
faddress(&q);
freference(q);
fvalue("Tudor");
freference("Tudor");// Warning: temporary used for p
}
Care din afirmatiile urmatoare sunt adevarate:
Programul afiseaza:
Balanescu
Balanescu
Balanescu
Tudor
Tudor
36. Fie urmatorul program C++:
#include <iostream.h>
class B{
public:
B(int i):i(i){}
protected:
int i;
};
class D1: public B{
public:
D1(int i):B(i){}
void inc(){i++;}
};
class D2: public B{
public:
D2(int i):B(i){}
void afisare(){cout<<”i=”<<i<<endl;}
};
class D: public D1, public D2{
public:
D(int i):D1(i),D2(i){}
};
void main(){
D d(0);
d.inc();
d.afisare();
}
Care din afirmatiile urmatoare sunt adevarate:
Programul afiseaza i=0
37. Fie urmatorul program C++:
#include <iostream.h>
class B{
public:
B(int i=-1):valB(i){}
B& operator=(const B &b){
valB=b.valB;
cout<<"B::op= ";
return *this;
}
private:
int valB;
};
class D:public B{
public:
D(int i, int j):B(i),valD(j){}
D& operator=(const D &d){
valD=d.valD;
cout<<"D::op= ";
return *this;
}
private:
int valD;
};
void main(){
B b(0), b1(1);
B *pB;
D d(0,0), d1(1,1);
b=b1;
d=d1;
b=d;
pB=&d;
*pB=d;
pB->operator=(d);
}
Care din afirmatiile urmatoare sunt adevarate:
Programul afiseaza:
B::op= D::op= B::op= B::op= B::op=
38. Fie urmatorul program C++:
class A{
int x;
public:
A(int x):x(x){};
};
class B{
protected:
int x;
public:
B(int x):x(x){};
};
class D:public B{
A a;
B b; // 1
B b(1); // 2
public:
void m(){
x=1; // 3
//b.x=1; //x nu este accesibil obiectelo
}
};
void main(){
B b(1); // 4
}
Care din urmatoarele instructiuni sunt eronate:
B b(1); // 2 (din clasa D)
39. Fie urmatorul program C++:
class A{
int x;
public:
A(int x):x(x){};
};
class B{
protected:
int x;
public:
B(int x):x(x){};
};
class D:public B{
A a;
B b; // 1
public:
void m(){
x=1; // 2
b.x=1; //3
}
};
void main(){
B b(1); // 4
}
Care din urmatoarele instructiuni sunt eronate:
b.x=1; // 3
40. 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
35 205
41. Fie programul urmator:
#include <iostream.h>
class Calculator{
private:
int value;
int keep;
char toDo;
public:
void add(){
keep=value; //keep first operand
value=0; //get ready for the second operand
toDo='+'; // what to do later
}
void subtract(){
keep=value; //keep first operand
value=0; //get ready for the second operand
toDo='-'; // what to do later
}
void multiply(){
keep=value; //keep first operand
value=0; //get ready for the second operand
toDo='*'; // what to do later
}
void compute(){
if (toDo=='+') value += keep;
else if (toDo == '-') value = keep-value;
else if (toDo == '*') value *= keep;
}
void clear(){value=keep=0;}
void digit (int x){value=value*10+x;}
int display(){ return value;}
Calculator(){clear();}
};
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.subtract();
c.digit(2); c.digit(0);
c.compute();
c.multiply();
c.digit(5);
c.compute();
cout<<c.display()<<endl;
};
Se cere sa indicati care din rezultatele urmatoare sunt afisate prin executarea acestui
program:
35
-50
1. Fie urmatorul program:
#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, neacceptata:
// B::v() conflicts with base class A
// virtual int v(){cout<<"int B::v()"<<endl; return 1;}
};
void main(){
A a, *pa;
B b;
pa=&a; pa->s(); pa->s(1); pa->v(); pa->v(1);
pa=&b; pa->s(); pa->s(1); pa->v(); pa->v(1);
}
Care din rezultatele urmatoare sunt afisate prin executarea programului?
void A::s()
void A::s(int)
virtual void A::v()
virtual void A::v(int)
void A::s()
void A::s(int)
virtual void A::v()
virtual void B::v(int)
3. Se considera programul:
#include <iostream.h>
class C{
public:
C(){i=0;};
void set_i(int pi){cout << "C::set_i (int)"<<endl;i=pi;}
//void set_i(int pi)const{i=pi;} // error: cannot modify a const object
int get_i (){cout << "C::get_i ()"<<endl; return i;}
int get_i()const {cout << "C::get_i ()const"<<endl;return i;}
int i;
};
void main(){
int j;
C x;
const C y;
x.i=1;
x.set_i(2);
j= x.get_i();
//y.i=1; // error: cannot modify a const object
//y.set_i(2); // warning: non-const function called for a const object
j= y.get_i();
}
Ce rezultate afiseaza acest program?
C ::set_i(int)
C::get_i()
C::get_i()const
4. Se considera urmatoarele clase:
class B{
public:
int i;
protected:
int j;
private:
int k;
public:
B(){i=j=k=0;}
void set_j(int pj){j=pj;}
int get_j(){return j;}
void set_k(int pk){k=pk;}
int get_k(){return k;}
};
class D: public B{
public:
D(){
i=1;
j=1;
k=1; // 1
set_k(1); // 2
}
};
class C{
public: C(){
b.i=2;
b.j=2; // 3
b.set_j(2); // 4
b.k=2; // 5
b.set_k(2); // 6
}
private:
B b;
};
Care din afirmatiile urmatoare sunt adevarate?
instructiunile // 1, // 3 si // 5 sunt toate incorecte
5. 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
dupa comentariul metode si operatori, se adauga:
Data(int zi=1, int luna=1, int an=2001);
friend ostream& operator<<(ostream&, Date &);
JAVA
1. Fie urmatorul bloc de instructiuni Java:
{
int x = 12;
q=1;
{
int q = 96;
// Both x & q available
x=q;
}
q=x;
x=1;
}
Care afirmatie este adevarata:
a. instructiunea x=q; este corecta;
b. instructiunea q=x; este corecta;
c. instructiunea x=1; este incorecta;
d. instructiunea q=1; este corecta;
2. Fie urmatorul bloc de instructiuni Java:
{
int x = 10;
x=1;
{
int x = 100;
}
x=2;
}
Care afirmatie este adevarata:
a. instructiunea x=1; este incorecta;
b. instructiunea int x = 100; este incorecta;
c. instructiunea x=2; este incorecta;
d. instructiunea int x = 10; este incorecta;
3. Fie urmatoarea clasa Java:
class D {
int i;
float f;
boolean b;
}
Care afirmatie este adevarata:
a. instructiunea D d = new D(1); este corecta;
b. instructiunea D d = new D(1,1); este corecta;
c. instructiunea D d = new D(); este corecta;
d. instructiunea D d = new D(1,1,1); este corecta;
4. Fie urmatoarea metoda Java:
int storage(String s) {
return s.length() * 2;
}
si instructiunea
int i=storage(”Java”);
Care afirmatie este adevarata:
a. instructiunea este incorecta;
b. i va primi valoarea 4;
c. i va primi valoarea 16;
d. i va primi valoarea 8;
5. Fie urmatoarea clasa Java:
class C{
public static int i=1;
}
si instructiunile:
C x=new C();
C y=new C();
x.i =x.i ?+1;
Care afirmatie este adevarata:
a. Dupa executarea instructiunii x.i =x.i ?+1; avem x.i = 2 si y.i=2;
b. Dupa executarea instructiunii x.i =x.i ?+1; avem x.i = 2 si y.i=1;
c. Dupa executarea instructiunii x.i =x.i ?+1; avem x.i = 1 si y.i=2;
d. Dupa executarea instructiunii x.i =x.i ?+1; avem x.i = 1 si y.i=1;
6. Fie urmatoarea clasa Java:
class C{
public static void main(String args[]){
System.out.println(args[0]);
System.out.println(args[1]);
}
}
Daca se executa linia de comanda:
>java C Curs Java An 3
atunci se va afisa:
a. Curs Java An
b. Curs
Java
c. Java An 3
d. Curs
Java
An
3
7. Fie urmatoarea clasa Java:
class C{
public static void main(String args[]){
for(int i=0;i<args.length; i++)
System.out.println(“ “ + args[i]);
}
}
Daca se executa linia de comanda:
>java C Curs Java An 3
atunci se va afisa:
a. Curs
Java
b. Curs Java An
c. Curs
Java
An
3
d. Java An 3
8. Fie urmatoarea clasa Java:
public class Person{
public Person(String p){name=new String(p);
System.out.println(++nr);
}
public static void main(String[] args){
while(true)f();
}
private static void f(){Person p =
new Person("Ionescu");
// obiectele NU se acumuleaza
// in heap si NU blocheaza executarea, spre deosebire de C++
}
private String name;
private static long nr=0;
};
Care afirmatie este adevarata:
a. Programul nu se opreste din executare;
b. Programul se termina, cu mesaj de eroare, deoarece la un moment
dat nu mai exista memorie suficienta pentru crearea obiectelor
Person;
c. Programul are erori de sintaxa;
d. Programul se termina, fara mesaj de eroare.
9. Fie urmatoarele clase Java:
class Overflow extends Exception{
public Overflow(Stack o){source=o;}
public Stack getSource(){return source;}
private Stack source;
}
class Underflow extends Exception{
public Underflow(Stack o){source=o;}
public Stack getSource(){return source;}
private Stack source;
}
class Stack{
public Stack(int n, String s){
dim=n; name=s; top=-1;
v= new Object[dim];
}
public void insert(Object o) throws Overflow{
if(top < dim-1) v[++top]=o;
else throw new Overflow(this);
}
public void delete() throws Underflow{
if(top >=0) top--;
else throw new Underflow(this);
}
public Object item() throws Underflow{
if(top >=0) return v[top];
else throw new Underflow(this);
}
public String getName(){return name;}
private Object v[];
private int dim;
private int top;
private String name;
}
public class StackDriver{
public static void main(String args[]){
Stack s1,s2;
s1=new Stack(2, "stiva Tudor");
s2=new Stack(2, "stiva Andrei");
try{
s1.insert("aa");
s1.delete();
s1.item();
} catch (Overflow e){
System.out.println("Overflow la " +
e.getSource().getName());
} catch (Underflow e){
System.out.println("Unnderflow la " +
e.getSource().getName());
}
}
}
Care afirmatie este adevarata:
a. Programul afiseaza: Overflow la stiva Tudor
b. Programul afiseaza: Underflow la stiva Tudor
c. Programul afiseaza: Overflow la stiva Andrei
d. Programul afiseaza: Underflow la stiva Andrei
10. Fie urmatoarele clase Java:
class Overflow extends Exception{
public Overflow(Stack o){source=o;}
public Stack getSource(){return source;}
private Stack source;
}
class Underflow extends Exception{
public Underflow(Stack o){source=o;}
public Stack getSource(){return source;}
private Stack source;
}
class Stack{
public Stack(int n, String s){
dim=n; name=s; top=-1;
v= new Object[dim];
}
public void insert(Object o) throws Overflow{
if(top < dim-1) v[++top]=o;
else throw new Overflow(this);
}
public void delete() throws Underflow{
if(top >=0) top--;
else throw new Underflow(this);
}
public Object item() throws Underflow{
if(top >=0) return v[top];
else throw new Underflow(this);
}
public String getName(){return name;}
private Object v[];
private int dim;
private int top;
private String name;
}
public class StackDriver{
public static void main(String args[]){
Stack s1,s2;
s1=new Stack(2, "stiva Tudor");
s2=new Stack(2, "stiva Andrei");
try{
s2.insert("aa");
s2.delete();
s2.item();
} catch (Overflow e){
System.out.println("Overflow la " +
e.getSource().getName());
} catch (Underflow e){
System.out.println("Unnderflow la " +
e.getSource().getName());
}
}
}
Care afirmatie este adevarata:
a. Programul afiseaza: Underflow la stiva Andrei
b. Programul afiseaza: Underflow la stiva Tudor
c. Programul afiseaza: Overflow la stiva Tudor
d. Programul afiseaza: Overflow la stiva Andrei
11. Fie urmatoarele clase Java:
class Overflow extends Exception{
public Overflow(Stack o){source=o;}
public Stack getSource(){return source;}
private Stack source;
}
class Underflow extends Exception{
public Underflow(Stack o){source=o;}
public Stack getSource(){return source;}
private Stack source;
}
class Stack{
public Stack(int n, String s){
dim=n; name=s; top=-1;
v= new Object[dim];
}
public void insert(Object o) throws Overflow{
if(top < dim-1) v[++top]=o;
else throw new Overflow(this);
}
public void delete() throws Underflow{
if(top >=0) top--;
else throw new Underflow(this);
}
public Object item() throws Underflow{
if(top >=0) return v[top];
else throw new Underflow(this);
}
public String getName(){return name;}
private Object v[];
private int dim;
private int top;
private String name;
}
public class StackDriver{
public static void main(String args[]){
Stack s1,s2;
s1=new Stack(2, "stiva Tudor");
s2=new Stack(2, "stiva Andrei");
try{
s1.insert("aa");
s1.delete();
s2.insert("aa");
s2.insert( new Integer(10));
s2.insert("aa");
} catch (Overflow e){
System.out.println("Overflow la " +
e.getSource().getName());
} catch (Underflow e){
System.out.println("Unnderflow la " +
e.getSource().getName());
}
}
}
Care afirmatie este adevarata:
a. Programul afiseaza: Overflow la stiva Tudor
b. Programul afiseaza: Overflow la stiva Andrei
c. Programul afiseaza: Underflow la stiva Tudor
d. Programul afiseaza: Underflow la stiva Andrei
12. Fie urmatoarele clase Java:
class Stack{
public Stack(int n, String s){
dim=n; name=s; top=-1;
v= new Object[dim];
}
public void insert(Object o) {
v[++top]=o;
}
public void delete(){
top--;
}
public Object item(){
return v[top];
}
public String getName(){return name;}
private Object v[];
private int dim;
private int top;
private String name;
}
public class StackDriver{
public static void main(String args[]){
Stack s1,s2;
s1=new Stack(2, "stiva Tudor");
s1.insert("aa");
s1.insert( new Integer(10));
System.out.println("Varful stivei: " + s1.item());
}
Care afirmatie este adevarata:
a. Programul afiseaza:
Varful stivei: aa
b. Programul afiseaza: stiva Tudor
c. Programul afiseaza:
Varful stivei: 10
d. Programul afiseaza: 2
13. Fie urmatoarele clase Java:
class Stack{
public Stack(int n, String s){
dim=n; name=s; top=-1;
v= new Object[dim];
}
public void insert(Object o) {
v[++top]=o;
}
public void delete(){
top--;
}
public Object item(){
return v[top];
}
public String getName(){return name;}
private Object v[];
private int dim;
private int top;
private String name;
}
public class StackDriver{
public static void main(String args[]){
Stack s1,s2;
s1=new Stack(2, "stiva Tudor");
s1.insert("aa");
s1.insert( new Integer(10));
s1.delete();
System.out.println("Varful stivei: " + s1.item());
}
Care afirmatie este adevarata:
a. Programul afiseaza: stiva Tudor
b. Programul afiseaza:
Varful stivei: 10
c. Programul afiseaza: 2
d. Programul afiseaza:
Varful stivei: aa
14. Fie urmatoarele clase Java:
class Stack{
public Stack(int n, String s){
dim=n; name=s; top=-1;
v= new Object[dim];
}
public void insert(Object o) {
v[++top]=o;
}
public void delete(){
top--;
}
public Object item(){
return v[top];
}
public String getName(){return name;}
private Object v[];
private int dim;
private int top;
private String name;
}
public class StackDriver{
public static void main(String args[]){
Stack s1,s2;
s1=new Stack(2, "stiva Tudor");
s1.insert("aa");
s1.insert( new Integer(10));
s1.delete();
System.out.println("Varful stivei: " + s1.item());
}
Care afirmatie este adevarata:
a. Programul afiseaza:
Varful stivei: aa
b. Programul afiseaza:
Varful stivei: 10
c. Programul afiseaza: stiva Tudor
d. Programul afiseaza: 2
15. Fie urmatoarele clase Java:
class Stack{
public Stack(int n, String s){
dim=n; name=s; top=-1;
v= new Object[dim];
}
public void insert(Object o) {
v[++top]=o;
}
public void delete(){
top--;
}
public Object item(){
return v[top];
}
public String getName(){return name;}
private Object v[];
private int dim;
private int top;
private String name;
}
public class StackDriver{
public static void main(String args[]){
Stack s1,s2;
s1=new Stack(2, "stiva Tudor");
s2=new Stack(2, "stiva Andrei");
s1.insert("aa");
s2.insert( new Integer(10));
System.out.println("Varful stivei: " + s1.item());
}
}
Care afirmatie este adevarata:
a. Programul afiseaza: stiva Tudor
b. Programul afiseaza:
Varful stivei: aa
c. Programul afiseaza: 2
d. Programul afiseaza:
Varful stivei: 10
16. Fie urmatoarele clase Java:
class CoadaCirculara{
public CoadaCirculara(int n, String s){maxDim=n; nume=s; v= new Object[maxDim];}
public boolean esteGoala(){return numarElemente==0;}
public boolean estePlina(){return numarElemente==maxDim;}
public void adauga(Object ob){
numarElemente++;
ultim= (ultim+1)%maxDim;
v[ultim]=ob;
}
public void elimina(){
numarElemente--;
prim=(prim+1)%maxDim;
}
public Object element(){
return v[prim];
}
// specializarea metodei Object.equals
// doua cozi sunt egale daca au aceleasi elemente
// chiar daca ele au dimensiuni maxime sau nume diferite
public boolean equals(Object obiectOarecare) {
if (obiectOarecare instanceof CoadaCirculara) {
CoadaCirculara cc= (CoadaCirculara)obiectOarecare;
boolean b=true;
b=b && (cc.numarElemente==numarElemente);
int i=prim;
int nr=numarElemente;
while(b && (nr !=0)){
b=b && cc.v[i].equals(v[i]);
nr--; i=(i+1)%maxDim;
}
return b;
}
return false;
}
public String nume(){return nume;}
private Object v[];
private int maxDim; // numarul maxim de elemente
private int prim=0;//pozitia primului element din lista
private int ultim=-1; //pozitia elementului adaugat ultima data
//lista are elementele in vectorul v, de la prim la ultim,
//in sensul acelor de ceasrnic
private int numarElemente=0; // numarul de elemente din coada
private String nume;// numele cozii
}
public class TestCoadaCirculara{
public static void main(String[] args){
CoadaCirculara x=new CoadaCirculara(3,"X");
CoadaCirculara y=new CoadaCirculara(3,"Y");
x.adauga("aa");
y.adauga("aa");
if(x.equals(y)) System.out.println("X=Y");
y.adauga("aa");
if(x.equals(y)) System.out.println("X=Y");
}
}
Care afirmatie este adevarata:
a. Programul afiseaza:
X=Y
X=Y
b. Programul nu afiseaza nimic
c. Programul afiseaza:
X=Y
d. Programul afiseaza: 3
17. Fie urmatoarele clase Java:
class CoadaCirculara{
public CoadaCirculara(int n, String s){maxDim=n; nume=s; v= new
Object[maxDim];}
public boolean esteGoala(){return numarElemente==0;}
public boolean estePlina(){return numarElemente==maxDim;}
public void adauga(Object ob){
numarElemente++;
ultim= (ultim+1)%maxDim;
v[ultim]=ob;
}
public void elimina(){
numarElemente--;
prim=(prim+1)%maxDim;
}
public Object element(){
return v[prim];
}
public String nume(){return nume;}
private Object v[];
private int maxDim; // numarul maxim de elemente
private int prim=0;//pozitia primului element din lista
private int ultim=-1; //pozitia elementului adaugat ultima data
//lista are elementele in vectorul v, de la prim la ultim,
//in sensul acelor de ceasrnic
private int numarElemente=0; // numarul de elemente din coada
private String nume;// numele cozii
}
public class TestCoadaCirculara{
public static void main(String[] args){
CoadaCirculara x=new CoadaCirculara(3,"X");
CoadaCirculara y=new CoadaCirculara(3,"Y");
x.adauga("aa");
y.adauga("aa");
if(x.equals(y)) System.out.println("X=Y");
y.adauga("aa");
if(x.equals(y)) System.out.println("X=Y");
}
}
Care afirmatie este adevarata:
a. Programul afiseaza: 3
b. Programul afiseaza:
X=Y
X=Y
c. Programul afiseaza:
X=Y
d. Programul nu afiseaza nimic
18. Fie urmatoarele clase Java:
class CoadaCirculara{
public CoadaCirculara(int n, String s){maxDim=n; nume=s; v= new
Object[maxDim];}
public boolean esteGoala(){return numarElemente==0;}
public boolean estePlina(){return numarElemente==maxDim;}
public void adauga(Object ob){
numarElemente++;
ultim= (ultim+1)%maxDim;
v[ultim]=ob;
}
public void elimina(){
numarElemente--;
prim=(prim+1)%maxDim;
}
public Object element(){
return v[prim];
}
public String nume(){return nume;}
private Object v[];
private int maxDim; // numarul maxim de elemente
private int prim=0;//pozitia primului element din lista
private int ultim=-1; //pozitia elementului adaugat ultima data
//lista are elementele in vectorul v, de la prim la ultim,
//in sensul acelor de ceasrnic
private int numarElemente=0; // numarul de elemente din coada
private String nume;// numele cozii
}
public class TestCoadaCirculara{
public static void main(String[] args){
CoadaCirculara x=new CoadaCirculara(3,"X");
x.adauga("a");
x.adauga("b");
x.adauga("c");
x.adauga("d");
x.adauga("e");
x.adauga("f");
System.out.println(x.element());
}
}
Care afirmatie este adevarata:
a. Programul afiseaza: b
b. Programul afiseaza: d
c. Programul afiseaza: c
d. Programul afiseaza: a
19. Fie urmatoarele clase Java:
public interface Actualizare{
public void actualizareNume(String nume);
public void actualizareVarsta(int varsta);
}
interface Afisare{
public void afisare();
public void actualizareVarsta(int varsta);
}
public class Persoana{
public Persoana(String nume, int varsta){
this.nume=nume; this.varsta=varsta;
}
public Persoana(){}
protected String nume="XXXX";
protected int varsta=0;
}
class PersoanaSpecializata extends Persoana
implements Actualizare, Afisare{
public void actualizareNume(String nume){this.nume=nume;}
public void actualizareVarsta(int varsta){this.varsta=varsta;}
public void afisare(){
System.out.println("nume= "+nume);
System.out.println("varsta= " + varsta);
}
}
public class Client{
public static void main(String args[]){
PersoanaSpecializata p=new PersoanaSpecializata();
Actualizare act=p;
Afisare afis=p;
act.actualizareNume("Ionescu");
act.actualizareVarsta(58);
afis.afisare();
}
}
Care afirmatie este adevarata:
a. Programul este incorect deoarece o clasa nu poate implementa dou a
interfete
b. Programul este incorect deoarece metoda public void afisare() nu
face parte din clasa Persoana
c. Programul afiseaza:
nume= Ionescu
varsta= 58
d. Programul este incorect deoarece metoda public void actualizareVarsta(int
varsta) nu face parte din clasa PersoanaSpecializata
20. Fie urmatorul program Java:
import java.awt.*;
import java.awt.event.*;
class Model{
private int x=0;
public Model(){};
public void actiune(){x++;System.out.println(x);};
}
public class View extends Frame{
private Button b;
private Model m;
private Controller c;
public static void main(String args[]){
Frame f= new View();
}
public View(){
setTitle("Exemplu Model-View-Controller");
b= new Button("Actiune");
add(b);
m=new Model();
c=new Controller(m);
b.addActionListener(c);
setSize(100,50);
setVisible(true);
}
}
class Controller implements ActionListener{
private Model md;
public Controller(Model p){
md=p;
}
public void actionPerformed(ActionEvent e){
md.actiune();
}
}
Care afirmatie este adevarata, daca se face de doua ori click pe butonul stang mouse
asupra butonului Actiune:
a. Programul nu afiseaza nimic
b. Programul afiseaza:
1
2
c. Valoarea atributului f.m.x ramane mereu la valoarea 0
d. Programul afiseaza:
0
1
21. Fie urmatorul program Java:
import java.awt.*;
import java.awt.event.*;
class Model{
private int x=0;
public Model(){};
public void increment(){x++;}
public int get_x(){return x;}
}
public class View extends Frame{
private Button b;
protected Model m;
private Controller c;
protected TextField tf;
public static void main(String args[]){
Frame f= new View();
}
public View(){
setTitle("Exemplu Model-View-Controller");
b= new Button("Actiune");
add("North",b);
m=new Model();
c=new Controller(this);
b.addActionListener(c);
tf=new TextField(10);
add("Center",tf);
setSize(100,250);
setVisible(true);
}
}
class Controller implements ActionListener{
private View vw;
public Controller(View v){
vw=v;
}
public void actionPerformed(ActionEvent e){
vw.m.increment();
vw.tf.setText(String.valueOf(vw.m.get_x()));
}
}
Care afirmatie este adevarata, daca se face de doua ori click pe butonul stang mouse
asupra butonului Actiune:
a. În campul de text f.tf este afisata valoarea 1
b. Programul nu afiseaza nimic
c. În campul de text f.tf este afisata valoarea 2
d. Valoarea atributului f.m.x ramane mereu la valoarea 0
22. Fie urmatorul program Java:
import java.util.Observer;
import java.util.Observable;
import java.awt.*;
import java.awt.event.*;
public class Observator extends Frame
implements WindowListener, Observer{
static protected ModelObservabil m=new ModelObservabil();
protected Button exitB, actB;
protected TextField field;
private ButtonController buttonC;
public static void main(String args[]){
Frame fn=new Observator(0);// nu observa pe m
Frame f01=new Observator(1);// observa pe m
Frame f02=new Observator(1);// observa pe m
}
public Observator(int i){
if (i==1)m.addObserver(this);
Panel p= new Panel();
buttonC=new ButtonController(this);
exitB= new Button("Exit");
exitB.addActionListener(buttonC);
actB= new Button("modifica");
actB.addActionListener(buttonC);
field= new TextField("MyTextField");
field.setEditable(true);
p.add(exitB);
p.add(actB);
add(field);
add("North",p);
addWindowListener(this);
setSize(160,110);
setVisible(true);
}
public void windowClosed(WindowEvent e){}
public void windowOpened(WindowEvent e){}
public void windowIconified(WindowEvent e){}
public void windowDeiconified(WindowEvent e){}
public void windowActivated(WindowEvent e){}
public void windowDeactivated(WindowEvent e){}
public void windowClosing(WindowEvent e){dispose();
//System.exit(0);
}
public void update(Observable observ, Object ob){
field.setText(m.afis);
}
}
class ButtonController implements ActionListener{
Observator view;
public ButtonController(Observator win){
view=win;
}
public void actionPerformed (ActionEvent e){
Object source=e.getSource();
if (source == view.exitB) System.exit(0);
else {
view.m.modifica();
};
}
}
class ModelObservabil extends Observable{
protected int i=0;
protected String afis=" ";
public ModelObservabil(){
setChanged();
notifyObservers();
}
public void modifica(){
i++;
afis= " "+ i;
setChanged();
notifyObservers();
}
}
Care afirmatie este adevarata, daca se face de click pe butonul stang mouse asupra
butonului „modifica” din fereastra fn:
a. Doar in campul de text field al ferestrei fo2 este afisata valoarea actualizata a
atributului Observator.m.i
b. În campul de text field al tuturor ferestrelor este afisata valoarea actualizata a
atributului Observator.m.i
c. Doar in campul de text field al ferestrei fo1 este afisata valoarea actualizata a
atributului Observator.m.i
d. Doar in campul de text field al ferestrelor fo1 si fo2 este afisata valoarea
actualizata a atributului Observator.m.i
23. Fie urmatorul program Java:
import java.util.Observer;
import java.util.Observable;
import java.awt.*;
import java.awt.event.*;
public class Observator extends Frame
implements WindowListener, Observer{
static protected ModelObservabil m=new ModelObservabil();
protected Button exitB, actB;
protected TextField field;
private ButtonController buttonC;
public static void main(String args[]){
Frame fn=new Observator(0);// nu observa pe m
Frame f01=new Observator(1);// observa pe m
Frame f02=new Observator(1);// observa pe m
}
public Observator(int i){
if (i==1)m.addObserver(this);
Panel p= new Panel();
buttonC=new ButtonController(this);
exitB= new Button("Exit");
exitB.addActionListener(buttonC);
actB= new Button("modifica");
actB.addActionListener(buttonC);
field= new TextField("MyTextField");
field.setEditable(true);
p.add(exitB);
p.add(actB);
add(field);
add("North",p);
addWindowListener(this);
setSize(160,110);
setVisible(true);
}
public void windowClosed(WindowEvent e){}
public void windowOpened(WindowEvent e){}
public void windowIconified(WindowEvent e){}
public void windowDeiconified(WindowEvent e){}
public void windowActivated(WindowEvent e){}
public void windowDeactivated(WindowEvent e){}
public void windowClosing(WindowEvent e){dispose();
//System.exit(0);
}
public void update(Observable observ, Object ob){
field.setText(m.afis);
}
}
class ButtonController implements ActionListener{
Observator view;
public ButtonController(Observator win){
view=win;
}
public void actionPerformed (ActionEvent e){
Object source=e.getSource();
if (source == view.exitB) System.exit(0);
else {
view.m.modifica();
};
}
}
class ModelObservabil extends Observable{
protected int i=0;
protected String afis=" ";
public ModelObservabil(){
setChanged();
notifyObservers();
}
public void modifica(){
i++;
afis= " "+ i;
setChanged();
notifyObservers();
}
}
Care afirmatie este adevarata, daca se face de click pe butonul stang mouse asupra
butonului „modifica” din fereastra fo1 sau fo2:
a. Doar in campul de text field al ferestrelor fo1 si fo2 este afisata valoarea
actualizata a atributului Observator.m.i
b. În campul de text field al tuturor ferestrelor este afisata valoarea actualizata a
atributului Observator.m.i
c. Doar in campul de text field al ferestrei fo1 este afisata valoarea actualizata a
atributului Observator.m.i
d. Doar in campul de text field al ferestrei fo2 este afisata valoarea actualizata a
atributului Observator.m.i

You might also like