Sunteți pe pagina 1din 76

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com For evaluation only.

1. Fie urmãtorul bloc de instructiuni Java: 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;
Nota: q=x si x=1 (apartin de primul bloc) nu sunt corecte, deoarece x este declarat de doua ori…Sunt
corecte x=q si q=96

2. Fie urmãtorul bloc de instructiuni Java:


{
int x = 10;
x=1;
{
int x = 100;
}
x=2;
}

Care afirmatie este adevarata:


b. instructiunea int x = 100; este incorecta;
a. instructiunea x=1; este incorecta;
c. instructiunea x=2; este incorecta;
d. instructiunea int x = 10; este incorecta;

Nota: X=100 este incorecta - variabila x nu a fost înca definita în momentul primei atribuiri.

3. Fie urmatoarea clasa Java:


class D {
int i;
float f;
boolean b;
}

Care afirmatie este adevarata:


c. instructiunea D d = new D(); este corecta;
a. instructiunea D d = new D(1); este corecta;
b. instructiunea D d = new D(1,1); este corecta;
d. instructiunea D d = new D(1,1,1); este corecta;

4. Fie urmatoarea metoda Java:


1
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

int storage(String s) {
return s.length() * 2;
}
si instructiunea
int i=storage(”Java”);

Care afirmatie este adevarata:


d. i va primi valoarea 8;
a. instructiunea este incorecta;
b. i va primi valoarea 4;
c. i va primi valoarea 16;

Nota: Sirul de caractere Java are 4 litere..Valoarea returnata va fi 4*2=8

5. Fie urmãtoarea clasã 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:
d. Dupa executarea instructiunii x.i =x.i ?+1; avem x.i = 1 si y.i=1;
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;

Nota: +x ….afiseaza valoarea lui x si apoi aduna 1 …deci +1 afiseaza 1…

6. Fie urmãtoarea clasã 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:
b. Curs
Java
a. Curs Java An
c. Java An 3
d. Curs
Java
An
3
Nota: args[0]…afiseaza Curs ……args[1]…afiseaza Java

7. Fie urmãtoarea clasã Java:


class C{
2
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

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:
c. Curs a. Curs b. Curs Java An
Java Java d. Java An 3
An
3
Nota:
Incrementare: i<4 (patru cuvinte)..Pt. i=0 afiseaza Curs, pt. i=1..afiseaza Curs Java, pt. i=2..afiseaza Curs
Java An si pt. i= 3 afiseaza Curs Java An 3

8. Fie urmãtoarea clasã 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.
Nota: Vezi //comentarii (comp afiseaza numere crescatoare..nu se opreste)

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;
3
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

}
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]=0;
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:
b. Programul afiseaza: Underflow la stiva Tudor
a. Programul afiseaza: Overflow la stiva Tudor
c. Programul afiseaza: Overflow la stiva Andrei

d. Programul afiseaza: Underflow la stiva Andrei


Nota: Pe s1 se incearca o extragere s1.item(); (item – de asemenea) din stiva deja goala
Underflow (subdepasire) - extragere din stiva goala

10. Fie urmatoarele clase Java:


4
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

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:
5
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

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

Nota: Se lucreaza pe s2 si se incearca o extragere (s2.item();) (item – de asemenea )din stiva deja goala
Underflow (subdepasire) - extragere din stiva goala

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));
6
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

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:
b. Programul afiseaza: Overflow la stiva Andrei
a. Programul afiseaza: Overflow la stiva Tudor
c. Programul afiseaza: Underflow la stiva Tudor
d. Programul afiseaza: Underflow la stiva Andrei
Nota: Stiva s2 este deja plina si se incearca o noua inserare (s2.insert("aa");

Nota: Overflow (supradepasire) - inserare in stiva plina adica in


S2 – 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:
c. Programul afiseaza:
Varful stivei: 10
7
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

a. Programul afiseaza:
Varful stivei: aa
b. Programul afiseaza: stiva Tudor
d. Programul afiseaza: 2
Nota: stiva se citeste de jos in sus
Insert 10 – rezulta varf stiva este 10

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:
d. Programul afiseaza:
Varful stivei: aa
a. Programul afiseaza: stiva Tudor
b. Programul afiseaza:
Varful stivei: 10
c. Programul afiseaza: 2
Nota: stiva se citeste de jos in sus

14. Fie urmatoarele clase Java:


class Stack{
public Stack(int n, String s){
dim=n; name=s; top=-1;
v= new Object[dim];
}
8
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

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
Nota: stiva se citeste de jos in sus

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;
9
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

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:
b. Programul afiseaza:
Varful stivei: aa
a. Programul afiseaza: stiva Tudor
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;
10
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

}
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:
c. Programul afiseaza:
X=Y
a. Programul afiseaza:
X=Y
X=Y
b. Programul nu afiseaza nimic
d. Programul afiseaza: 3
Nota:.. x.adauga("aa");…y.adauga("aa");..rezulta ca X=Y (compilator)

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];
}
11
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

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:
d. Programul nu afiseaza nimic
a. Programul afiseaza: 3
b. Programul afiseaza:
X=Y
X=Y
c. Programul afiseaza:
X=Y
Nota: Asemanator cu ex. 16, dar la acest ex. lipsesc liniile 17 – 34 (subliniate) de la ex. 16

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
12
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

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:
b. Programul afiseaza: d
a. Programul afiseaza: b
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{
13
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

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:
c. Programul afiseaza:
nume= Ionescu
varsta= 58
a. Programul este incorect deoarece o clasa nu poate implementa douã interfete
b. Programul este incorect deoarece metoda public void afisare() nu face parte din clasa Persoana
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();
}
14
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

}
Care afirmatie este adevarata, dacã se face de douã ori click pe butonul stang mouse
asupra butonului Actiune:
a. Programul nu afiseazã nimic
b. Programul afiseazã:
1
2
c. Valoarea atributului f.m.x rãmâne mereu la valoarea 0
d. Programul afiºeazã:
0
1
Nota: x=0 si x++..rezulta ca pt. primul click x=0 se afiseaza 1 si pt. al doilea click x=1..se afiseaza 2

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()));
}
15
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

Care afirmatie este adevarata, dacã se face de douã ori click pe butonul stang Mouse asupra butonului Actiune:
c. În câmpul de text f.tf este afisatã valoarea 2
a. În câmpul de text f.tf este afiºatã valoarea 1
b. Programul nu afiseazã nimic
d. Valoarea atributului f.m.x rãmâne mereu la valoarea 0
Nota: Asemanator cu ex. 20

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);
}
16
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

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, dacã se face de click pe butonul stang mouse asupra butonului „modifica” din
fereastra fn:
d. Doar in câmpul de text field al ferestrelor fo1 si fo2 este afisatã valoarea actualizata a atributului
Observator.m.i
Nota..Vezi liniile subliniate de la frame
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

23 Fie urmãtoarea clasã Java:


public class D {
int i;
float f;
boolean b;
private static void main(){
D d = new D(1);
D d = new D();
D d = new D(1,1);
D d = new D(1,1,1);
17
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

}
}
Care afirmaþie este adevãratã:
nstructiunea D d = new D(1); este corectã;
instructiunea D d = new D(); este corectã;
instructiunea D d = new D(1,1); este corectã;
instructiunea D d = new D(1,1,1); este corectã;

PROBLEME

1. Un program scris în Java poate rula pe orice platforma deoarece:


c. Masina virtuala translateaza interpreteaza programul si translateaza apelurile sistem
a. Limbajul Java e derivat din C++
b. Compilatorul este identic cu cel de C++
d. Api-ul este portabil

2. Un program scris în Java se va compila cu comanda:


a. javac Test c. javac Test.java
b. java Test.java d. javac Test.class

3. Un program scris în Java se va lansa cu comanda:


a. javac Test.java c. java Test.java
b. java Test d. java Test.class

4. Ce este un Applet?
d. Un program care ruleaza în contextul unui browser
a. Un tip de calculator
b. Un program care ruleaza direct pe orice calculator
c. Un sit web interactiv

5. Un applet va rula în orice browser deoarece


c. Browserul interpreteaza direct codul sursa
a. Serverul are o masina virtuala incorporata
b. Browserul are o masina virtuala incorporata
d. Appleturile nu au nevoie de o masina virtuala

6. Care este scopul metodei statice main ?


b. Actioneaza ca un punct de intrare în program
a. Sa creeze o interfata cu utilizatorul
c. Creaza ferestrele si butoanele aplicatiei
d. Actioneaza ca o poarta spe sistemul de operare

7. O clasa Applet furnizeaza:


b. Metode care definesc aspectul si comportamentul apletului
a. Un browser care sã ruleze apletul
c. A pagina HTML speciala
d. Permisiunile de a comunica cu serverul

8. Ce metoda apeleaza browserul pe un applet nou incarcat?


a. Main c. Paint
b. Start d. Init

18
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

9. Care este rolul declaratiilor import?


a. Permite referirea claselor fara utilizarea de prefixe
b. Elimina necesitatea declararii variabilelor
c. Permite importul imaginilor folosite
d. Elimina apelurile directe a functiilor fara clase

10. In cazul implementarii unei interfete trebuie sã definim in mod obligatoriu :


a. Doua metode ale interfetei c. Orice metoda a interfetei
b. Numai anumite metode ale interfetei d. Toate metodele interfetei

11. Aplicatiile Java ruleaza pe urmatorul sistem de operare:


a. Windows c. UNIX
b. Linux d. Toate cele trei

12. Urmatorul cod sursa Java se afla într-un fisier. Cum se numeste fisierul?
class Foo {
public static void println() { System.out.println("Foo"); }
}
public class FooDemo {
public static void main(String[] argv) {
System.out.println("FooDemo");
Foo.println();
}
}
a. Foo.java c. FooDemo.Java
b. Foo.class d. Foodemo.class
13. Daca bo este boolean, numar este int sir este string atunci care din urmatoarele linii este incorecta?
a. If(bo) c. If(numar<=1)
b. If(numar<0) d. If(sir==”Java”)

14. Care sunt valorile variabilelor a ºi b dupa executarea instructiunilor:


int a = 1, b = -2;
a = a + b;
b = a – b;
a = a – b;
a. a=1, b=2 c. a=2, b=-3
b. a=0, b=1 d. a=-2, b=1
Nota:
a=1+(-2)=1-2=-1
b=-1

15.Care sunt valorile variabilelor a si b dupa executarea instructiunilor:


int a = -1, b = 2;
a += b;
b = a- b;
a -= b;
a. a=-1, b=2 c. a=-2, b= 1
b. a=2, b=-1 d. a=-2, b=-1

16.Care sunt valorile variabilelor a si b dupa executarea instructiunilor:


int a = 1, b = -2;
a = a ^ b;
19
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

b = a ^ b;
a = a ^ b;
a. a=-2, b=1 c. a=-1, b=1
b. a=2, b=-2 d. a=1, b=-2

17.Care sunt valorile variabilelor a si b dupa executarea instructiunilor:


int a = -1, b = 2;
a ^= b;
b = a ^ b;
a ^= b;
a. a= -1, b=2 c. a=2, b=-1
b. a= 1, b=-2 d. a=-2, b=1

18. Care sunt valorile variabilelor a si b dupa executarea instructiunilor:


int a = -1, b = 2;
a = (a > b ? a : b);
b = (a < b ? a : b);
a. a= 2, b=-1 c. a=1, b=2
b. a= -1, b= 2 d. a= 2, b= 2

19.Care sunt valorile variabilelor a si b dupa executarea instructiunilor:


int a = 1, b = 2;
if (a < b ) a = b;
if (a < b) b = a;
a. a= 1, b=1 c. a=2, b=2
b. a= 1, b= 2 d. a= 2, b= 1

20. Clasa BorderLayout contine campuri statice pentru:


a. Adaugarea unor componente in anumite zone ale containerul
b. Introducerea unor metode noi
c. Specificarea culorii, si a fontului
d. Afisarea ferestrei unui applet

21. Constructorul are foloseste la:


a. Eliberarea memoriei c. Initializeaza masina virtuala
b. Importa pachete d. Initializeaza noile obiecte create

22. System.out.println este


a. O variabila c. Un obiect
b. O clasa d. O metoda

23. Ce valori poate lua o variabila de tip boolean?


a. 1 c. “true”
b. 0 d. false

24. Ce valori nu poate lua o variabila de tip boolean?


a. 1 c. true
b. a==b (a si b sunt variabile de tip int) d. false

25. Ce valori nu poate lua o variabila de tip boolean?


a. a=b (a si b sunt variabile de tip boolean) c. false
b. true d. 0
20
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

26. Ce valori nu poate lua o variabila de tip boolean?


a. a=b (a si b sunt variabile de tip int) c. false
b. true d. false==x (x este o variabila de tip boolean)

27. Ce valori nu poate lua o variabila de tip boolean?


a. a=b (a si b sunt variabile de tip boolean) c. “true”
b. a==b (a si b sunt variabile de tip int) d. false==x (x este o variabila de tip boolean)

28. Care din urmatoarele tipuri de date poate retine valori de la -32.768 la 32.767 ?
a. char c. byte
b. short d. int

29. Ce valoare va avea variabila x dupa executarea operatiilor?


int x = 0;
x = (5*4) % 7;
x = x / 5;
a. 6 c. 1
b. 1.2 d. 0
Nota: 5*4=20…20/7=2 rest 6…6/5=1 intreg si…

30. Ce valoare va avea variabila numar la finalul buclei?


int numar = 1;
for (int x = 0; x < 4; x++)
{
numar = numar << 1;
}
a. 1 c.16
b. 4 d. 32
Nota:
Pt. x=0 , x<4 si 0++=1
x=1, x<4 si 1++=2
x=2, x<4 si 2++=3
x=3, x<4 si 3++=4
Nota
4 in baza 2 este 0010
Numar=<<0010=0100
0100 in baza 2 este 16

31. Ce valoare va avea variabila numar la finalul buclei?


int numar = -1;
for (int x = 0; x < 4; x++)
{
numar = numar << 1;
}
a. 0 c. 16
b. -4 d. -16

32. Un vector se instantiază astfel?


a. int vector[100]; c. float [] numere={1.1, 1.2};
b. String [100]sir; d. byte [] buffer;
21
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

33. Un vector se instantiază astfel?


a. int vector[100]; c. float [] numere;
b. String [100]sir; d. byte [] buffer = new byte[100];

34. Ce efect are următoarea secventade cod?


char a[] = {’a’, ’b’, ’c’};
char [] b = new char[3];
a=b;
a. b se va copia în a c. a si b se referă la aceiasi zona de memorie
b. a se va copia în b d. se va genera o exceptie

35. Ce efect are următoarea secventă de cod?


char a[] = {’a’, ’b’, ’c’};
String b = new String(data);
if(a==b)
System.out.println(“egale”);
else
System.out.println(“inegale”);
a. Se afisează egale c. Eroare la compilare
b. Se afisează inegale d. Se va genera excepŃie la rulare

36. Ce efect va avea intructiunea urmatoare?


System.out.println("The answer is: "+17+3);
a. Programul nu se compileaza c. Se va afisa: The answer is 173
b. Se va afisa: The answer is 20 d. Se va genera o exceptie
Nota: uniune de siruri de caractere

37. Care este efectul liniilor de cod urmatoare?


if("String".toString() == "String")
System.out.println("Equal");
else
System.out.println("Not Equal");
a. Programul nu se compileaza c. Afiseaza Not Equal
b. Afiseaza Equal d. Genereaza o exceptie

38. O clasa care implementeaza interfata urmatoare …


public interface AQuestion
{
public abstract void someMethod() throws Exception;
}
c. Ar trebui sã defineasca o metoda public void someMethod() care va emite exceptii
a. Va fi in mod necesar o clasa abstracta
b. Ar trebui sa defineasca metoda public abstract void someMethod();
d. Ar trebui sã defineasca o metoda public void someMethod() care nu va emite exceptii

39. O clasa care implementeaza interfata urmatoare va implementa în mod obligatoriu public interface
AQuestion
{
22
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

void someMethod();
}
a. o metoda public void someMethod();
b. o metoda friend void someMethod();
c. o metoda public void someMethod(); care obligatoriu va emite exceptii
d. o metoda public abstract void someMethod();

40. Care din liniile din codul de mai jos prezinta o problema de incapsulare ?
1. class BadCode {
2. int num;
3. public int getNum() {
4. return num;
5. }
6. public void setNum(int num) {
7. this.num = num;
8. }
9. ...
10. }
a. Linia 1 c. Linia 4
b. Linia 2 d. Linia 7

41. Care din liniile urmatoare va genera o exceptie ?


1. class BadCode {
2. private Foo foo;
3. public BadCode (Foo f) {
4. foo = f;
5. }
6. public BadCode() {}
7. protected void useFoo() {
8. int num = foo.num;
9. String name = foo.name;
10. ....
11. }
12. ....
13. }
a. Linia 2 c. Linia 6
b. Linia 4 d. Linia 8

42. Dorim sa implementam o clasa total protejata si care sa nu mai fie extensibila, care din liniile urmatoare
ar trebui modificata?
1. class Test {
2. private int key = 1234;
3. //...
4. protected void setKey(int privateKey) {
5. this.key = privateKey;
6. }
7. protected int getKey() {
8. return this.key;
9. }
10. //...
11. }
a. Linia 1 c. Linia 4
23
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

b. Linia 2 d. Linia 8

43. Functia Clone() are ca scop:


class Test {
private int key = 1234;
//...
public Test () {}
public Test (int k) { this.key = k; }
protected int getKey(){return this.key; }
public final Object clone() throws
java.lang.CloneNotSupportedException {
throw new java.lang.CloneNotSupportedException();
}
//...
}
a. definirea unei clase clonabile c. definirea unei clase care nu poate fi extinsa
b. definirea unei clase extensibile d. clasa si orice derivare a acesteia va fi neclonabila

44. Pentru a bloca serializarea unei clase trebuie sa:

a. Definim clasa ca fiind finala c. Definim o metoda readObject


b. Definim clasa ca fiind statica d. Definim o metoda writeObject

45. Codul sursa urmator ne spune ca:


public boolean match(Object o) {
return this.getName() == ((SomeClass)o).getName();
}
a. obiectele sunt identice c. obiectele fac parte din aceiasi clasa
b. obiectele sunt egale d. nici una

46. Pentru a defini un camp care sa stocheze informatii sensibile (conturi, nr. de card) se va folosi:
a. String c. Char array
b. StringBuffer d. Char

47. Ce efect va produce urmatorul program Java?


public class Test
{
public void method(Object o)
{
System.out.println("Object Version");
}
public void method(String s)
{
System.out.println("String Version");
}
public static void main(String args[])
{
Test t = new Test();
t.method(null);
}
}

24
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

a. Programul nu se compileaza c. Afiseaza “Object Version”


b. Se compileaza dar produce o exceptie la rulare d. Afiseaza “String Version”

48. Ce efect va produce urmatorul program Java?


public class Test
{
public void method(StringBuffer sb)
{
System.out.println("StringBuffer Version");
}
public void method(String s)
{
System.out.println("String Version");
}
public static void main(String args[])
{
Test t = new Test();
t.method(null);
}
}
a. Programul nu se compileaza c. Afiseaza “StringBuffer Version”
b. Se compileaza dar produce o exceptie la rulare d. Afiseaza “String Version”
Nota: metoda (StringBuffer sb) – ambigua

49. Ce efect are urmatorul program Java?


public class Test{
public static void main(String args[]){
System.out.println("Before Try");
try{
}
catch(Throwable t){
System.out.println("Inside Catch");
}
System.out.println("At the End");
}
}
c. Afiseaza “Before Try” si “At the End”
a. Nu se complieaza: nici un obiect Throwable nu a fost emis in blocul try
b. Nu se compileaza: nu pot fi prinse obiecte Throwable, ci numai obiecte Exception
d. Afiseaza “Before Try” , “Inside Catch” si “At the End”

50. Ce efect are urmatorul program Java?


public class Test{
public static void main(String args[]){
System.out.println("Before Try");
try{
}
catch(IOException t){
System.out.println("Inside Catch");
}
System.out.println("At the End");
}
25
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

}
b. Nu se compileaza: nu pot fi prinse obiecte IOException, ci numai Exception
a. Nu se complieaza: nici un obiect IOException nu a fost emis in blocul try
c. Afiseaza “Before try” si “At the End”
d. Afiseaza “Before try” , “Inside Catch” si “At the End”

51. Care din urmatoarele afirmatii este adevarata?


d. O metoda statica nu poate returna o variabila nestatica a clasei
a. O metoda statica nu poate returna un obicet Exception
b. O metoda statica nu poate emite un obiect Exception
c. O metoda statica nu poate returna o variabila statica a clase

52. Cum se va comporta urmatorul program?


public class A
{
private void method1() throws Exception
{
throw new RuntimeException();
}
public void method2()
{
try
{
method1();
}
catch(RuntimeException e)
{
System.out.println("Caught Runtime Exception");
}
catch(Exception e)
{
System.out.println("Caught Exception");
}
}
public static void main(String args[])
{
A a = new A();
a.method2();
}
}
a. Programul nu se compileaza c. Afiseaza “Caught Runtime Exception”
b. Afiseaza “Caught Exception” d. Afiseaza ambele mesaje

53. Cum se va comporta urmatorul program?


class Base
{
public void aMethod() throws ClassNotFoundException
{
}
}
public class Derived extends Base
{
26
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

public void aMethod() throws RuntimeException


{
}
}
d. Se compileaza corect
a. Programul nu se compileaza deoarece RuntimeException nu este derivata din RuntimeException
b. Se lanseaza o exceptie ClassNotFoundException la compilare
c. Se lanseaza o exceptie RuntimeException la rular

54. Cititi cu atentie urmatorul co sursa:


import java.awt.*;
public class TestFrame extends Frame
{
Button bNorth = new Button("North");
Button bSouth = new Button("South");
Button bEast = new Button("East");
Button bWest = new Button("West");
Button bCenter = new Button("Center");
public TestFrame()
{
setLayout(new BorderLayout());
add(bSouth,BorderLayout.SOUTH);
add(bWest,BorderLayout.WEST);
add(bEast,BorderLayout.EAST);
add(bNorth,BorderLayout.NORTH);
add(bCenter);
setLayout(new FlowLayout());
validate();
pack();
setVisible(true);
}
public static void main(String args[])
{
TestFrame tf = new TestFrame();
}
}
b. Se compileaza si afiseaza butoanele pe o singura linie
a. Programul nu se compileaza
c. Se compileaza dar genereaza o exceptie
d. Se compileaza si afiseaza butoanele sub forma de grid

55. O clasa care are totii constructorii privati :


a. Trebuie declarata clasa finala c. Poate fi mostenita
b. Poate fi instantiata d. Nu poate fi mostenita

56. Urmariti cu atentie codul urmator:


public class NiceThreads implements Runnable
{
public void run()
{
while(true) { }
27
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

}
public static void main(String args[])
{
NiceThreads nt1 = new NiceThreads();
NiceThreads nt2 = new NiceThreads();
NiceThreads nt3 = new NiceThreads();
nt1.run();
nt2.run();
nt3.run();
}
}
a. Se compileaza si lanseaza patre fire care vor rula la infinit
b. Se compileaza si se lanseaza un singur fir
c. Programul nu se compileaza
d. Se compileaza dar genereaza o exceptie la rulare

57. Pentru a preveni executarea unei metode simultan de către mai multe fire de executie folosim:
a. public c. native
b. final d. Syncronized

58. Pentru a excuta o procedura în mod atomic delarăm metoda ca fiind:


a. syncronized c. final
b. public d. Native

59. Managerul de asezare implicit pentru o fereastră este:


a. LayoutManager c. BorderLayout
b. null d. FlowLayout

60. Managerul de asezare implicit pentru un panel este:


a. BorderLayout c. null
b. GridLayout d. FlowLayout

61. Constructorul clasei de bază se apelează prin intermediul cuvântului cheie:


a. this c. super
b. base d. interface

62. În Java o clasa poate extinde


a. cel mult o interfată c. oricâte clase
b. cel mult o clasă d. oricâte interfete
63. În Java o interfată poate extinde
a. cel mult o interfată c. oricâte clase
b. cel mult o clasă d. oricâte interfete

64. În Java o clasa poate implementa cel mult


a. o clasă c. oricâte clase
b. o interfată d. oricâte interfete

65. Pentru a bloca utilizarea directa a unei clase aceasta se va declara folosind specificatorul:
a. abstract c. protected
b. final d. Private

66. Pentru a bloca derivarea unei clase aceasta se va declara folosind specificatorul:
28
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

a. abstract c. protected
b. final d. Private

67. Clasa Menu este derivata din:


a. MenuComponent c. PopupMenu
b. MenuItem d. MenuBar

68. Lansarea unei exceptii se face cu ajutorul cuvântului cheie:


a. throws c. catch
b. throw d. try

69. Prinderea unei exceptii se face cu ajutorul cuvântului cheie:


a. throws c. catch
b. throw d. try

70. Ce cuvânt nu face parte din limbaj:


a. volatile c. dispose
b. transient d. native

71. Ce cuvânt nu face parte din limbaj:


a. const c. final
b. bool d. finally

72. Ce cuvânt nu face parte din limbaj:


a. const c. break
b. continue d. delete

73. Ce cuvânt nu face parte din limbaj:


a. short c. awt
b. long d. do

74. Ce cuvânt nu face parte din limbaj:


a. class c. interface
b. struct d. enum

75. Ce cuvânt nu face parte din cuvintele cheie ale limbajului:


a. int c. goto
b. true d. enum

76. Ce cuvânt nu face parte din cuvintele cheie ale limbajului:


a. class c. null
b. const d. boolean

77. Ce cuvânt cheie al limbajului nu este folosit:


a. strictfp c. instanceof
b. const d. transient

78. Ce afisează următorul program:


public class Main {
int x=0;
int f() { return x+1; }
public static void main(String[] args) {
29
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

System.out.println("x este " + f());


}
}
a. x este 0 c. Eroare la compilare
b. x este 1 d. Exceptie la rulare

79. Ce afisează următorul program:


public class Main {
int x=0;
static int f() { return x+1; }
public static void main(String[] args) {
System.out.println("x este " + f());
}
}
a. Eroare la compilare c. x este 0
b. Exceptie la rulare d. x este 1

80. Ce afisează următorul program:


public class Main {
static int x=0;
static int f() { return x--; }
public static void main(String[] args) {
System.out.println("x este " + f() + " acum este "+ f() );
}
}
a. Eroare la compilare c. x este 0 acum este 0
b. Exceptie la rulare d. x este 0 acum este -1

81. Ce afisează următorul program:


public class Main {
static int x=0;
static int f() { return ++x; }
public static void main(String[] args) {
System.out.println("x este " + f() + " acum este "+f());
}
}
a. x este 0 acum este 1 c. x este 0 acum este 1
b. x este 1 acum este 2 d. x este 0 acum este -1

82. Ce afisează următorul program:


public class Main {
static int x=0;
static int f() { return (++x)*(x--); }
public static void main(String[] args) {
System.out.println("x este " + f() + " acum este "+f());
}
}
a. x este 0 acum este 0 c. x este 1 acum este 2
b. x este 1 acum este 1 d. x este 2 acum este 4

83. Ce afisează următorul program:


class Element{
30
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

public Element(){ System.out.print(" Element "); }


}
class Carte extends Element{
public Carte(){ System.out.print(" Carte "); }
}
class Revista extends Carte{
public Revista(){ System.out.print(" Revista "); }
}
public class Main {
public static void main(String[] args) { Element revista = new Revista(); }
}
a. Element c. Element Carte Revista
b. Revista d. Revista Carte Element

84. Ce afisează următorul program:


interface Element{
public void Print();
}
class Carte implements Element{
public void Print(){ System.out.print(" Carte "); }
}
class Revista implements Element{
public void Print(){ System.out.print(" Revista "); }
}
class Biblioteca extends ArrayList<Element>{
public void Print (){
Iterator<Element> it = iterator() ;
while(it.hasNext()){ it.next().Print(); }
}
}
public class Main {
public static void main(String[] args) {
Biblioteca b = new Biblioteca();
b.add(new Carte());
b.add(new Revista());
b.Print();
}
}
a. Nu afiseaza nimic c. Se compileaza dar lanseaza exceptie la rulare
b. Nu se compileaza, eroare la compilare d. Carte Revista

85. Ce afisează următorul program:


interface Element{
public void Print();
}
class Carte implements Element{
public void Print(){ System.out.print(" Carte "); }
}
class Revista implements Element{
public void Print(){ System.out.print(" Revista "); }
}
class Biblioteca extends ArrayList<Element> implements Element{
31
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

public void Print (){


Iterator<Element> it = iterator() ;
while(it.hasNext()){ it.next().Print(); }
}
}
public class Main {
public static void main(String[] args) {
Biblioteca b = new Biblioteca();
b.add(new Carte());
b.add(new Revista());
b.add(b); b.Print();
}
}
a. Nu afiseaza nimic c. Se compileaza dar lanseaza exceptie la rulare
b. Nu se compileaza, eroare la compilare d. Carte Revista Carte Revista

86. Ce afisează următorul program:


interface Element{
public void Print();
}
class Carte implements Element{
public void Print(){ System.out.print(" Carte "); }
}
class Revista implements Element{
public void Print(){ System.out.print(" Revista "); }
}
class Biblioteca extends ArrayList<Element> implements Element{
public void Print (){
Iterator<Element> it = iterator() ;
while(it.hasNext()){ it.next().Print(); }
System.out.println();
}
}
public class Main {
public static void main(String[] args) {
Biblioteca b1 = new Biblioteca();
Biblioteca b2 = new Biblioteca();
b2.add(b1); b1.add(b2);
b1.Print();
}
}
a. Nu afiseaza nimic c. Carte Revista Carte Revista
b. Se compileaza dar lanseaza exceptie la rulare d. Nu se compileaza, eroare la compilare

87. Cititi cu atentie urmatorul cod sursa:


class Memory{ }
public class Main {
public static void main(String[] args) {
while(true){ Memory m = new Memory(); }
}
}
a. Programul se compileaza dar se blocheaza
32
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

b. Se compileaza, consuma toata memoria si se opreste


c. Se compileaza si ruleaza la infinit deoarece nu se aloca nimic
d. Se compileaza si ruleaza la infinit deoarece nu se poate consuma toata memoria

88. Cititi cu atentie urmatorul cod sursa:


class Memory{
int [ ] matrice;
public Memory(){ matrice = new int[100]; }
}
public class Main {
public static void main(String[] args) {
while(true){ Memory m = new Memory(); }
}
}
a. Ruleaza la infinit deoarece memoria se eliberează automat
b. Programul se compileaza dar se blocheaza
c. Consuma toata memoria si se opreste
d. Ruleaza dar emite o exceptie

89. Cititi cu atentie urmatorul cod sursa:


class Memory implements Serializable{
int [] matrice;
public Memory(){ matrice = new int[100]; }
}
a. Clasa Memory extinde clasa Serializable
b. Clasa Memory mosteneste clasa Object
c. Clasa Memory implementează interfata Object
d. Clasa Memory implementează clasa Serializable

90. În corpul unui constructor se poate apela un alt constructor?


a. Doar constructorul clasei de bază prin intermediul cuvântului super
b. Doar un constructor al clasei derivate prin intermediul cuvântului super
c. Un constructor cu alti parametri
d. Un constructor cu aceiasi parametri

91. Obiectul curent se poate transmite ca parametru prin intermediul cuvântului:


a. super c. class
b. this d. object

92. În prezenta firelor de executie multiple incrementarea atomică a unei variabile partajate se obtine prin
intermediul specificatorului:
a. X++ c. synchronized
b. final d. static

93. În prezenta firelor de executie multiple decrementarea atomică a unei variabile partajate se obtine prin
intermediul specificatorului:
a. const c. x--
b. synchronized d. thread

94. Un fir de executie se obtine prin extinderea clasei:


a. Runnable c. Object
b. Thread d. Frame
33
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

95. Un fir de executie se obtine prin implementarea interfetei:


a. Runnable c. Object
b. Thread d. Serializable

96. Un fir de executie se porneste prin apelarea directa a metodei:


a. run c. start
b. new d. init

97. Un fir de executie se porneste prin apelarea directa a metodei:


a. run c. start
b. new d. init

98. Urmatorul specificator are efect doar în prezenta firelor de executie:


a. run c. start
b. synchronized d. static

99. O clasă care implementează interfata Runnable în mod obligatoriu trebuie:


a. să fie publică c. să fie declarată synchronized
b. să implementeze metoda run d. să fie declarată ca fiind abstractă

100. O interfată care extinde interfata Runnable în mod obligatoriu trebuie:


a. să fie publică c. să implementeze metoda run
b. să fie declarată synchronized d. nici una

101. Codul următor nu se compilează, lipseste specificatorul:


class NewThread implements Runnable{ }
a. public c. abstract
b. private d. run

1. Fie programul: ..ok


#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:
34
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

c. 3200
a. 3300
b. 3201
d. 3211

Atentie..Se face deosebire dupa Cerc & operator – pe linia 2

1.1. Fie programul:…ok


#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

Atentie..Se face deosebire dupa Cerc operator (fara &) pe linia 2

1.2. Varianta in plus


#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()<<” ”;
}
Raspuns
3312

35
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

Atentie: Se face deosebire dupa Cerc &operador – pe linia 1

2. Fie programul:…ok
// 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: b. Informatica Informatica 1

3. Fie programul:…ok
// destructor static,
#include <iostream.h>
class B{
public:
~B(){cout<<"~B()"<<endl;}
};
class D: public B{
public:
36
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

~D(){cout<<"~D()"<<endl;}
};
void main(){
clrscr();
B *pb;
D *pd;
pd= new D();
pb=new D();
delete pb;
delete pd;
}
Programul afiseaza :
a. ~ B() ~B() ~D() c. ~ B()~D()~B() ~D()
b. ~ B() ~D() d. ~ B() ~D() ~B()
Atentie..Liniile subliniate sunt diferite

3.1. Fie următorul program C++:…ok


// 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(){
B *b=new B(); // apel B()
delete b;
b=new D(); // apel B();D()
delete b;
}
Care din afirmatiile următoare sunt adevărate:
b. Programul afisează:
B() ~B() B() D() ~B()
a. Programul afisează:
B() ~B() B() D() ~D()
c. Programul afisează:
B() ~B() B() ~B()
d. Programul afisează:
B() ~B() D() ~B()
Atentie..Liniile subliniate sunt diferite

3.2. Fie programul :…ok


// destructor virtual,
#include <iostream.h>
class B{
37
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

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() c. ~ B() ~D()
b. ~ B() ~B() ~D() d. ~ D()~B()~D() ~B()
Atentie....este destructor virtual, ex. diferit fata de destructor static..

3.3. Fie următorul program C++:…ok


// destructor virtual
#include <iostream.h>
class B{
public:
B(){cout<<"B()"<<endl;}
virtual ~B(){cout<<"~B()"<<endl;}
};
class D: public B{
public:
D(){cout<<"D()"<<endl;}
virtual ~D(){cout<<"~D()"<<endl;}
};
void main(){
B *b=new B(); // apel B()
delete b;
b=new D(); // apel B();D();
// destructorii, in ordine inversa
delete b;
}
Care din afirmatiile următoare sunt adevărate:
a. Programul afisează: c. Programul afisează:
B() ~B() B() D() ~D() ~B() B() ~B() B() D() ~B() ~D()
b. Programul afisează: d. Programul afisează:
B() ~B() B() D() ~B() ~B() B() ~B() B() D() ~B()
Atentie..este destructor virtual…seamana cu ex. precedent care nu are liniile subliniate la acest ex.

4. Fie programul:…ok
#include <iostream.h>
class B{
38
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

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;
}
Programul afiseaza:
a. virtual method v() of D c. virtual method v() of D
static method st() of D static method st() of B
b. virtual method v() of B d. virtual method v() of B
static method st() of D static method st() of B
Atentie…diferentele sunt liniile subliniate

4.1. Fie programul:…ok


#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=&d;
pb->st(); //static metod s() of B
pb->v(); //virtual metod v() of D
return 0;
}

Programul afiseaza:

a. static method s() of D c. static method s() of D


virtual method v() of D virtual method v() of B
b. static method s() of B d. static method s() of B
39
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

virtual method v() of B virtual method v() of D


Atentie…diferentele sunt liniile subliniate

4.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 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;
}

Raspuns
static method st() of B
virtual method v() of B
static method st() of B
virtual method v() of D

5. Fie programul :…ok


// 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{...//B este clasa de baza)
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()
40
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

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 bd(d); // conversie implicita la clasa de baza; ..// B(B &b )
getch();
}

Programul afiseaza :
c. B() B(B&b) B() D() B(B &b) B(B &b)
a. B() B() B(B&b) B() D() B(B &b) B(B &b)
b. 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)

¡!!! Atentie …. Seamana cu 12 , diferentele sunt liniile subliniate

5.1. Fie programul :…ok


// constructor de copiere atat in clasa de baza cat si in clasa derivata
// constructorul de copiere din clasa derivata utilizeaza pe B() pentru constructia // // subbiectului 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()
B b1(b); // apel B(B & ); nu se mai utilizeaza B()!...//B(B &b )
D d; // apel B();D()…//B() D()
D d1(d); // nu se apeleaza B(B &b)…B() D(D&d)
}
Programul afiseaza :
b. B() B(B&b) B() D() B() D(D &d)
a. B() B(B&b) B() D() B(B &b) D(D &d)- nu
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) - nu

¡!!! Atentie ….Seamana cu 11, diferentele sunt liniile subliniate

6. Fie programul :…ok


#include <iostream.h>
class Cerc{
public:
Cerc(float r):raza(r){}
float getRaza(){return raza;}
void operator++(){raza++;}
41
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

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 :
a. 1 6 c. 2 6
b. 2 5 d. 1 5

Inaltimea se incrementeaza …1++=2


Raza nu se incrementeaza…ramane 5
Pt. cilindru..rezulta (2 5)

7. Fie programul…ok
//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();
}
42
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

Programul afiseaza:
a. 1 2 3 4 5 c. 0 0 0 0 0
b. 1 1 1 1 1 d. 0 1 2 3 4
i=0…0++=1
i=1…1++=2
i=2…2++=3
i=3…3++=4
i=4…4++=5
Atentie..liniile subliniate sunt diferite
strcpy(destinatie,sursa)-functia are rolul de a copia sirul de la adresa sursa la adreasa destinatie

7.1. 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

Atentie..liniile subliniate sunt diferite


Nu are #conio.h

8. Fie următorul program C++:..ok


#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:
43
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

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 desemnată o valoare nedefinită.
Care din afirmatiile următoare sunt adevărate:
d. Programul afisează:
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
a. Programul afisează:
Punct[30,50]
44
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

Centru=Punct[30,50]; Raza=2.7
Punct[120,89]
Centru=Punct[120,89]; Raza=2.7
Centru=Punct[30,50]; Raza=xx
b. Programul afisează:
Punct[30,50]
Centru=Punct[120,89]; Raza=2.7
Punct[120,89]
Centru=Punct[120,89];
Centru=Punct[30,50]; Raza=xx
c. Programul afisează:
Punct[30,50]
Centru=Punct[30,50];
Punct[120,89]
Centru=Punct[120,89]; Raza=2.7
Centru=Punct[30,50]; Raza=xx

9. Fie următorul program C++:…ok


#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 următoare sunt adevărate:
a. Programul afisează i=-1 c. Programul afisează i=0
b. Programul afisează i=2 d. Programul afisează i=1

10. Fie următorul program C++:…ok


#include <iostream.h>
class B{
45
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

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 următoare sunt adevărate:
b. Programul afisează:
B::op= D::op= B::op= B::op= B::op=

a. Programul afisează :
B::op= D::op= D::op= B::op= D::op=
c. Programul afisează:
B::op= D::op= B::op= D::op= D::op=
d. Programul afisează:
B::op= D::op= D::op= D::op= B::op=

11. class A{…ok


int x;
public:
A(int x):x(x){};
};
class B{
protected:
int x;
public:
46
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

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 următoarele instructiuni sunt eronate:
c. b.x=1; // 3
a. B b; // 1
b. x=1 // 2
d. B b(1); // 4 (din functia main)
error C2248: 'x' : cannot access protected member declared in class 'B'
: see declaration of 'x' Error executing cl.exe.

12. Fie programul


#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?
47
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

a. 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)
b. 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 A::v(int)
c. 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 B::v()
virtual void B::v(int)
d. void A::s()
void A::s(int)
virtual void A::v()
virtual void A::v(int)
int B::s()
void B::s(int)
virtual void B::v()
virtual void B::v(int)

12.1. Fie urmatorul program:…ok


#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; }
48
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

// 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); //(daca ..s(1) si V(0)..acelasi raspuns)
}
Prin executarea sa, programul afiseaza:
c. void A::s()
void B::v(int) …virtual void B::v(int)

a. void B::v()
void A::v(int)
b. void A::v()
void B::v(int)
d. void A::v()
void A::v(int)

!!! Atentie, diferentele sunt liniile subliniate…

Variante…posibile de ex.
1. pa=&b; pa->s(1); pa->v(1);
void A::s(int)
virtual void B::v(int)

2. pa=&b; pa->s(); pa->v();


void A::s
virtual void A::v

12.2. Fie urmatorul program:,,,ok


#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;}
};
49
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

void main(){
A *pa;
B b;
pa=&b; pa->v(); pa->s(1);
}
Prin executarea sa, programul afiseaza:
d. void B::v()…???
void A::s(int)
a. void B::v()
void A::v(int)
b. void A::v()
void B::v(int)
c. void A::v()
void A::v(int)
Raspuns..nici o varianta …corect este..
void A::v
virtual void A::s(int)
!!!!Atentie..diferentele sunt liniile subliniate

Variante posibile

1.pa=&b; pa->v(); pa->s();


virtual void A::v()
void A::s()

2. pa=&b; pa->v(1); pa->s();


virtual void B::v(int)
void A::s()

13. Fie următorul program C++:..ok


#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();
p=&b;
p->v();
}

Care din afirmatiile următoare sunt adevărate:


b. Programul afiseaza mesajul:
50
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

A:m()
B:(v)
a. Expresia p->v()este incorectă deoarece metoda v este inaccesibilă
c. Programul afisează mesajul: A:v()
d. Expresia a.m() este incorectă deoarece metoda m este inaccesibilă

14. Fie următorul program C++, în care operatorul de insertie << este supraîncărcat. Operatorul de
atribuire = este cel predefinit, cu semantica prin referinta…..ok
#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:
b. Programul afisează: a. Programul afisează:
10 20 10 20
1000 20 10 20
c. Programul afisează: d. Programul afisează:
1000 20 1000 20
10 20 1000 20
Nota. Lipsesc liniile subliniate de la 15.1. Este suprainacarcuare cu semántica prin referinta.
14.1. 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….ok
#include <iostream.h>
class C{
public:
C(int n, int v[]);
void set(int i, int val){pi[i]=val;}
C& operator=(C&);
51
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

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
52
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

10 20
Nota. Liniile subliniate sunt in plus fata de ex. 14. Este supraincarcare cu semnatica prin valoare.

14.2. 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 numai dacă d?s….ok
#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 neinitializată

Care din afirmatiile următoare sunt adevărate:


d. Programul afisează:
53
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

10 20
10 20
10 20
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

Nota: Diferente fata de ex. 14.1..linia subliniata..

ERORI

15. Fie următorul program C++:…ok


#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 A::s()"<<endl;
return 1;
}
// 2.
void s(int i){
i++;cout<<"void A::s(int i)"<<endl;
}
// 3.
virtual void v(int i){
i++;cout<<"virtual void A::v()"<<endl;
}
// 4.
virtual int v(){
cout<<"int A::v()"<<endl; return 1;
54
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

}
};
Care din afirmatiile următoare sunt adevărate:
d. //4. este incorectă
a. //1. este incorectă
b. //2. este incorectă
c. //3. este incorectă

15.1. 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?
a. instructiunile // 1, // 3 si // 5 sunt toate incorecte
b. doar instructiunile // 2, si // 4 sunt incorecte
c. doar instructiunile // 3 si // 4 sunt incorecte
15.2. Fie următorul program C++:…ok
class A{
int x;
public:
A(int x):x(x){};
55
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

};
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 obiectelor
}
};
void main(){
B b(1); // 4
}
Care din următoarele instructiuni sunt eronate:
b. B b(1); // 2 (din clasa D)
a. B b; // 1
c. x=1; // 3
d. B b(1); // 4 (din functia main)

error C2059: syntax error : 'constant'


error C2040: 'b' : 'class B (void)' differs in levels of indirection from 'class B'
Error executing cl.exe.

15.3. 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;}
56
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

};
//4.supraincarcare metoda virtuala,
virtual void v(){count<<"int B::()"<<endl:return1}
};
Care definitie este incorecta? 1, 2, 3 sau 4??
Raspuns 4

16. Fie următorul program C++:…ok


#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 următoare sunt adevărate:
d. Programul afisează:
Balanescu
Balanescu
Balanescu
Tudor
Tudor
a. Expresia faddress(&q); este eronată;
b. Instructiunea de declarare Persoana q="Balanescu"; este eronată;
c. Expresia p->afisare() este eronată;

error C2664: 'freference' : cannot convert parameter 1 from 'char [6]' to 'class Persoana &'
A reference that is not to 'const' cannot be bound to a non-lvalue

17. Analizati mecanismele de conversie din urmatorul program: (2009)..ok


#include <conio.h>
#include <iostream.h>
class Complex;
class Punct{
public:
Punct(float x=0, float y=0):x(x),y(y){}
operator Complex();
operator float(){return x;}
private:
57
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

float x,y;
friend ostream& operator<<(ostream &stream, const Punct &p );
};
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;
friend ostream& operator<<(ostream &stream, const Complex &c );
friend Punct::operator Complex();
};
// in varianta aceasta, Punct::operator Complex nu trebuie declarata functie prietena
//Punct::operator Complex(){ return Complex(x,y);}
Punct::operator Complex(){//functie friend a clasei Complex
Complex c; c.x=x;c.y=y;
return c;
}
ostream& operator<<(ostream &stream, const Punct &p ){
stream << "("<<p.x<<","<<p.y<<")";
return stream;
}
ostream& operator<<(ostream &stream, const Complex &c ){
stream <<c.x<<"+"<<c.y<<"*i";
return stream;
}
void main(){
Punct p(2,3);
Complex c(8,9);
cout<<(Complex)p<< endl<<(Punct)c<<endl;
p=c; cout<<p<<endl;
p=1;
cout<<p<<endl;
int i=p; cout<<i<<endl;
c=p=1;
(Punct)((Complex)p);
getch();
}
Raspuns
2+3*i
(8,9)
(8,9)
(1,0)
1

18. Care va fi continutul fisierului “H.TXT” in urma executarii programului urmator?...ok


#include <stdio.h>
FILE *f; char x, y, z;
void main(){
f = fopen(“H.TXT”,”w”);
58
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

fprintf(f,”Ieri %d\n”,13);
fprintf(f,”Azi %d”,14);
fprintf(f,”Maine %d\n”,15);
fclose(f);
}
Raspuns..
Ieri 13
Azi 14Maine 15

19. Se considera programul…ok


#include <stdio.h>
void aplic(int x, int *y){x+=3; (*y)-=2; printf(“%d, %d”, x, *y);}
void main(void){int x=12, y=20; aplic(x, &x); printf(“,%d,”,x); printf(“%d,”,y);aplic(y,&y); }
Ce se va afisa in urma executarii acestuia:
b. 15,10,10,20,23,18 c. 15,13,13,13,16,11
a. 13,13,13,13,16,14 d. 15,10,15,20,23,20

20. Care este rezultatul tiparit de programul urmator?...ok


#include <stdio.h>
#include <string.h>
void f(char s[], int);
void main(){f(“examenul”,0);}
void f(char s[256], int i){
if(i<strlen(s)) {
f(s, i+1);
if (strchr(“aeiou”, s[i]) != 0) printf(“%c”, s[i]);
}
}
a. eaeu c. ueae
b. examenul d. e

CALCULATOR

21 Fie programul urmator:…ok


#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
59
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

}
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:

a. 25 c. 35
-10 -50
b. 35 d. 35
50 -20

21.1 Fie programul:


#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();
60
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

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 c. 205 35
b.10 20 d. 20 10

22. 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. C ::set_i(int)
C::get_i()
C::get_i()const
a. C ::set_i(int)
C::get_i() const
C::get_i()
b. C ::set_i(int)
C::get_i()
C::get_i()
d. C ::set_i(int)
C::get_i() const
61
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

C::get_i()const

23. 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
}
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ă: c. Programul afisează:
a =1 a = -1
i = -1 i = -1
b. Programul afisează: d. Programul afisează:
a =1 a = -1
i=1 i=1

24. Fie urmatorul program C++


// 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();
62
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

}
Care expresie este incorecta:
a. b.m(); c. p->m();
b. p=&a; d. p->v();
Raspuns…gresit …b:m() si b:v()

24.1. Fie urmatorul program C++


// Constructor cu semantica prin referinta
// Operatorul = este cel implicit
#include <iostream.h>
class C{
public:
C(int n, 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;
}
Raspuns..
10 20
Atentie …deosebirea este ultima linie subliniata

24.2. Fie urmatorul program C++


// Constructor cu semantica prin referinta
// Operatorul = este cel implicit
#include <iostream.h>
class C{
public:
C(int n, int v[]);
friend ostream& operator<<(ostream &o, const C&);
private:
int dim;
int *pi;
};
C::C(int n, int v[]) {
dim=n;
63
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

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;
}
Raspuns…
-100 2 3
Atentie .. deosebirea este ultima linie subliniata

24.3. 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;
}
Raspuns
Programul afiseaza:
-1000 20

Atentie…deosebirea este penultima linie

64
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

TUDOR, ANDREI, CAR


25. Fie urmatorul program C++
#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(){};
65
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

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();
}
Raspuns…
A Person: Andrei
A Car:B-39-TDR
A Person: Tudor
25.1. 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;
66
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

};
#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){};
67
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

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
b. B-39-TDR Andrei Tudor
c. Andrei B-39-TDR Tudor
d. B-39-TDR Tudor Andrei

Sau scrise asa:


A Person: Tudor
A Person: Andrei
A Car: B39-TDR
26. Se considera programul C:…ok
#include <stdio.h>
int f(void){ int i = 0; return (i++); }
int g(void){static int x = 0; return (x++); }
void main(void){ int k;
for (k = 0; k < 3; k++) printf("F %d\n", f());
for (k = 0; k < 3; k++) printf("G %d\n", g());
}
Analizati modul de functionare si precizati care este iesirea
acestui program.
b)
F0
F0
F0
G0
G1
G2

27. Se considera programul


#include <stdio.h>
void main(void){
int s=0;
int k;
for (k = 1; k <= 10; ++k); s += k;
printf("Suma primelor 10 de numere naturale nenule este %d\n", s);
}
Ce afiseaza programul:
a) 55 c) uneori si 55
b) intotdeauna 11 d) uneori si 11

68
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

28. Se considera programul:


#include <stdio.h>
void main(void){
int n1, n2;
printf("n1 = "), scanf("%d", &n1);
printf("n2 = "), scanf("%d", &n2);
if (n2 =! 0) printf("n1/n2 = %d\n", n1/n2);
else printf("Impartire prin ZERO\n");
}
Ce se afiseaza pentru n1 = 8 si n2 = 16?
a) n1/n2 = 0 c) n1/n2 = 16
b) n1/n2 = 8

29. Fie urmatorul program..??-cod gresit


// 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];
69
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

}
void LIST::remove(){
first= ++first % nrmax;
--nrelem;
}
int main()
{
LIST(5);
return 0;
}
A. 3 2 0 0
B. 3 3 0 0
C. 3 3 1 1
D. 3 2 1 2
E. 3 2 1 2

TEORIE

30. 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 c. Clasa C este derivata din clasa T
b. Clasa C este o clasa abstracta d. Clasa T este derivata din clasa C
!!! O clasa generica poate opera cu tipuri de date nespecificate
70
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

31. 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),)
private:
float x,y;
};
Metoda operator Complex operator float() este utilizata pentru:
A. Conversia unui obiect Punct in obiect Complex
B. Conversia obiectelor Complex in numere reale
C. Conversia unui numar real in obiect Complex
D. Conversia unui obiect Complex in obiect punct

31.1. 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 operator Complex operator float() este utilizata pentru:
A. Conversia unui obiect Complex in obiect punct
B. Conversia obiectelor Complex in numere reale
C. Conversia unui obiect Punct in obiect Complex
D. Conversia unui numar real in obiect Complex

Atentie.. deosebire liniile subliniate

71
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

32. 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(abstractElm*ae)();
virtual AbstractElm*get()();
virtual int isEmpty()();
virtual int isFull()();
};
#endif
Care afirmatie este corecta?
A. AbstractList este o clasa abstracta
B. isEmpty este metoda virtuala pura
C. AbstractList este o clasa concreta
D. Obiectele clasei pot fi construite cu AbstractList()
!!! Clasa abstracta trebuie intodeauna sa aiba o functie virtuala pura

33. 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;
}
72
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

a. Clasa C defineste o structura de tip coada (FIFO)


b. Clasa C defineste o structura de tip stiva (LIFO)
c. Clasa C este un vector d. Clasa C este abstracta

33.1. 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:
a. LIST este o structura de date de tip coada
b. LIST este o structura de date de tip stiva
73
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

c. LIST este o clasa abstracta


d. LIST este un vector.
Nota.. sunt diferente..lipsesc liniile de la //elements.h..si de la //elements.cpp..

35. 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:
a. Definitia virtual void v()supraincarca definitia virtual void v(int i)
b. Definitia virtual void v(int i) este incorecta deoarece exista o definitie pentru metoda v.
c. void v() este metoda ce va fi legata static.
d. in expresia p->v(); metoda v este legata static

36. Fie programul:


class Persoana{
public:
Persoana(char * n){nume=n;}
void afisare(){cout<<nume<<endl;}
char *nume;
};
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

37. Fie programul:…ok


#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;
74
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

}
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

38. Fie următorul 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 următoare sunt adevărate:
c. Programul nu se termină, deoarece conditia de continuare din instructiunea while este mereu îndeplinită
a. Programul se termină, deoarece instructiunea delete p eliberează memoria
alocată pentru obiectul referit de p
b. Programul se termină, deoarece la iesirea din functia f se eliberează memoria
alocată pe stivă pentru obiectul referit de p
d. Programul se blochează la epuizarea memoriei heap

39. 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 =
75
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.

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:


Raspuns:
La iesirea din functia f(), spatiul alocat pentru sirul de caractere “Balanescu” este eliberat

40. 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;

};
Punct::operator Complex(){ return Complex(x,y);}

Metoda Punct:: operator Complex() nu a fost implementat inline, precum operator Punct() deoarece

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

76

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