Sunteți pe pagina 1din 2

A.

Se consideră clasa următoare:


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;
};
unde constructorul este implementat prin
C::C(int n, int v[]) { dim=n; pi=v;}

şi programul de test:
void main(){
int a[]={1,2,3}, b[]={10,20};
C x(3,a),y(2, b);
a[0]= -100; cout<<x<<endl; cout<<(x=y)<<endl;
y.set(0,-1000); cout<<x<<endl; cout<<(x=x)<<endl;
}
Se cere:
a. să implementaţi operatorul de inserţie, astfel încât, spre exemplu, prin:
int a[]={1,-2,-30, 40}; C x(3,a); cout<<x;
să se afişeze: (1, –2, -30)
b. să precizaţi ce se afişează prin executarea programului de test şi să explicaţi rolul
constructorului implementat prin referinţă şi al operatorului de atribuire la obţinerea
acestor rezultate; (răspunsul fără explicaţii nu este luat în considerare);
c. Să presupunem că operatorul = este supraîncărcat prin:
C& C::operator=(C& x){
delete[] pi;
dim=x.dim; pi=new int[dim];
for(int j=0; j<dim; j++){pi[j]=x.pi[j];}
return *this;
}
Explicaţi rezultatele afişate de program în aceste condiţii, subliniind diferenţele faţă de
punctul b.

B. Se dă următoarea colecție de clase Java. Se cere să:

1. descrieți arhitectura Observer-Observable de proiectare a programelor Java, precizând rolul clasei


java.util.Observable și al interfeței java.util.Observer;
2. explicați rolul interfeței java.lang.Runnable;
3. explicați efectul executării acestui program;
4. implementați o clasă numită AfisarePeConsola, astfel încât, înlăturând semnul de comentariu „//” din
primele două instrucțiuni ale metodei main, programul să afișeze pe consolă timpul scurs de la
începutul executării programului, in formatul „ora:minutul:secunda” . Indicație: operatorii aritmetici “/”
și “%” calculează câtul, respectiv restul împărțirii a două numere întregi.
import java.util.*;
import javax.swing.*; class AfisareGrafica extends JFrame implements
class Oscilator extends Observable implements Afisare{
Runnable { protected JTextField tf= new JTextField(10);
int secunda=0; public AfisareGrafica(){
public void run(){ add("Center", tf); setTitle("Rolex");
while(true){ setSize(100,100); setVisible(true);
setChanged(); notifyObservers(); }
try {Thread.sleep (1000);} catch (Exception public void afiseaza(int i){
e){} tf.setText(String.valueOf(i);}
secunda++; }
} class Cronometru{
} private Oscilator o; private Cadran c1;
} private Thread to;
class Cadran implements Observer{ public Cronometru(Afisare af){
Afisare af; o=new Oscilator(); c1= new Cadran(af);
public Cadran(Afisare loc){af=loc;} o.addObserver(c1);
public void update(Observable o, Object arg){ to=new Thread (o); to.start();
int secunda=((Oscilator)o).secunda; }
af.afiseaza(secunda); }
} public class TestCronometru{
} public static void main(String[] args){
interface Afisare{ //Cronometru Pobeda=
public void afiseaza(int i); // new Cronometru(new AfisarePeConsola());
} Cronometru Rolex=
new Cronometru(new AfisareGrafica());
}
}

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