JAVA 1. Fie urmãtorul bloc de instrucþiuni Java: { int x = 12; q=1; { int q = 96; // Both x & q available x=q; } q=x; x=1; } Care afirmatie este adevarata: a. instructiunea x=q; este corecta; b. instructiunea q=x; este corecta; c. instructiunea x=1; este incorecta; d. instructiunea q=1; este corecta; 2. Fie urmãtorul bloc de instrucþiuni Java: { int x = 10; x=1; { int x = 100; } x=2; } Care afirmatie este adevarata: a. instructiunea x=1; este incorecta; b. instructiunea int x = 100; este incorecta; c. instructiunea x=2; este incorecta; d. instructiunea int x = 10; este incorecta; 3. Fie urmatoarea clasa Java: class D { int i; float f; boolean b; } Care afirmatie este adevarata: a. instructiunea D d = new D(1); este corecta; b. instructiunea D d = new D(1,1); este corecta; c. instructiunea D d = new D(); este corecta; d. instructiunea D d = new D(1,1,1); este corecta; 4. Fie urmatoarea metoda Java: int storage(String s) { return s.length() * 2; } si instructiunea int i=storage(”Java”); Care afirmatie este adevarata: a. instructiunea este incorecta; b. i va primi valoarea 4; c. i va primi valoarea 16; d. i va primi valoarea 8;
5. Fie urmãtoarea clasã Java: class C{ public static int i=1; } si instrucþiunile: C x=new C(); C y=new C(); x.i =x.i ?+1; Care afirmatie este adevarata: a. Dupa executarea instructiunii x.i =x.i ?+1; avem x.i = 2 si y.i=2; b. Dupa executarea instructiunii x.i =x.i ?+1; avem x.i = 2 si y.i=1; c. Dupa executarea instructiunii x.i =x.i ?+1; avem x.i = 1 si y.i=2; d. Dupa executarea instructiunii x.i =x.i ?+1; avem x.i = 1 si y.i=1; 6. Fie 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: a. Curs Java An b. Curs Java c. Java An 3 d. Curs Java An 3 7. Fie urmãtoarea clasã Java: class C{ public static void main(String args[]){ for(int i=0;i<args.length; i++) System.out.println(“ “ + args[i]); } } Daca se executa linia de comanda: >java C Curs Java An 3 atunci se va afisa: a. Curs Java b. Curs Java An c. Curs Java An 3 d. Java An 3 8. Fie 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. 9. Fie urmatoarele clase Java: class Overflow extends Exception{ public Overflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Underflow extends Exception{ public Underflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) throws Overflow{ if(top < dim-1) v[++top]=o; else throw new Overflow(this); } public void delete() throws Underflow{ if(top >=0) top--; else throw new Underflow(this); } public Object item() throws Underflow{ if(top >=0) return v[top]; else throw new Underflow(this); } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s2=new Stack(2, "stiva Andrei"); try{ s1.insert("aa"); s1.delete(); s1.item(); } catch (Overflow e){ System.out.println("Overflow la " + e.getSource().getName()); } catch (Underflow e){
System.out.println("Unnderflow la " + e.getSource().getName()); } } } Care afirmatie este adevarata: a. Programul afiseaza: Overflow la stiva Tudor b. Programul afiseaza: Underflow la stiva Tudor c. Programul afiseaza: Overflow la stiva Andrei d. Programul afiseaza: Underflow la stiva Andrei 10. Fie urmatoarele clase Java: class Overflow extends Exception{ public Overflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Underflow extends Exception{ public Underflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) throws Overflow{ if(top < dim-1) v[++top]=o; else throw new Overflow(this); } public void delete() throws Underflow{ if(top >=0) top--; else throw new Underflow(this); } public Object item() throws Underflow{ if(top >=0) return v[top]; else throw new Underflow(this); } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s2=new Stack(2, "stiva Andrei"); try{ s2.insert("aa"); s2.delete(); s2.item(); } catch (Overflow e){ System.out.println("Overflow la " + e.getSource().getName()); } catch (Underflow e){ System.out.println("Unnderflow la " + e.getSource().getName()); } } }
Care afirmatie este adevarata: a. Programul afiseaza: Underflow la stiva Andrei b. Programul afiseaza: Underflow la stiva Tudor c. Programul afiseaza: Overflow la stiva Tudor d. Programul afiseaza: Overflow la stiva Andrei 11. Fie urmatoarele clase Java: class Overflow extends Exception{ public Overflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Underflow extends Exception{ public Underflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) throws Overflow{ if(top < dim-1) v[++top]=o; else throw new Overflow(this); } public void delete() throws Underflow{ if(top >=0) top--; else throw new Underflow(this); } public Object item() throws Underflow{ if(top >=0) return v[top]; else throw new Underflow(this); } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s2=new Stack(2, "stiva Andrei"); try{ s1.insert("aa"); s1.delete(); s2.insert("aa"); s2.insert( new Integer(10)); s2.insert("aa"); } catch (Overflow e){ System.out.println("Overflow la " + e.getSource().getName()); } catch (Underflow e){ System.out.println("Unnderflow la " + e.getSource().getName()); } } } Care afirmatie este adevarata: a. Programul afiseaza: Overflow la stiva Tudor
b. Programul afiseaza: Overflow la stiva Andrei c. Programul afiseaza: Underflow la stiva Tudor d. Programul afiseaza: Underflow la stiva Andrei
12. Fie urmatoarele clase Java: class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) { v[++top]=o; } public void delete(){ top--; } public Object item(){ return v[top]; } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s1.insert("aa"); s1.insert( new Integer(10)); System.out.println("Varful stivei: " + s1.item()); } Care afirmatie este adevarata: a. Programul afiseaza: Varful stivei: aa b. Programul afiseaza: stiva Tudor c. Programul afiseaza: Varful stivei: 10 d. Programul afiseaza: 2 13. Fie urmatoarele clase Java: class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) { v[++top]=o; } public void delete(){ top--; } public Object item(){ return v[top]; } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name;
} public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s1.insert("aa"); s1.insert( new Integer(10)); s1.delete(); System.out.println("Varful stivei: " + s1.item()); } Care afirmatie este adevarata: a. Programul afiseaza: stiva Tudor b. Programul afiseaza: Varful stivei: 10 c. Programul afiseaza: 2 d. Programul afiseaza: Varful stivei: aa 14. Fie urmatoarele clase Java: class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) { v[++top]=o; } public void delete(){ top--; } public Object item(){ return v[top]; } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s1.insert("aa"); s1.insert( new Integer(10)); s1.delete(); System.out.println("Varful stivei: " + s1.item()); } Care afirmatie este adevarata: a. Programul afiseaza: Varful stivei: aa b. Programul afiseaza: Varful stivei: 10 c. Programul afiseaza: stiva Tudor d. Programul afiseaza: 2 15. Fie urmatoarele clase Java: class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; }
public void insert(Object o) { v[++top]=o; } public void delete(){ top--; } public Object item(){ return v[top]; } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s2=new Stack(2, "stiva Andrei"); s1.insert("aa"); s2.insert( new Integer(10)); System.out.println("Varful stivei: " + s1.item()); } } Care afirmatie este adevarata: a. Programul afiseaza: stiva Tudor b. Programul afiseaza: Varful stivei: aa c. Programul afiseaza: 2 d. Programul afiseaza: Varful stivei: 10 16. Fie urmatoarele clase Java: class CoadaCirculara{ public CoadaCirculara(int n, String s){maxDim=n; nume=s; v= new Object[maxDim];} public boolean esteGoala(){return numarElemente==0;} public boolean estePlina(){return numarElemente==maxDim;} public void adauga(Object ob){ numarElemente++; ultim= (ultim+1)%maxDim; v[ultim]=ob; } public void elimina(){ numarElemente--; prim=(prim+1)%maxDim; } public Object element(){ return v[prim]; } // specializarea metodei Object.equals // doua cozi sunt egale daca au aceleasi elemente // chiar daca ele au dimensiuni maxime sau nume diferite public boolean equals(Object obiectOarecare) { if (obiectOarecare instanceof CoadaCirculara) { CoadaCirculara cc= (CoadaCirculara)obiectOarecare; boolean b=true; b=b && (cc.numarElemente==numarElemente); int i=prim; int nr=numarElemente; while(b && (nr !=0)){ b=b && cc.v[i].equals(v[i]); nr--; i=(i+1)%maxDim;
} return b; } return false; } public String nume(){return nume;} private Object v[]; private int maxDim; // numarul maxim de elemente private int prim=0;//pozitia primului element din lista private int ultim=-1; //pozitia elementului adaugat ultima data //lista are elementele in vectorul v, de la prim la ultim, //in sensul acelor de ceasrnic private int numarElemente=0; // numarul de elemente din coada private String nume;// numele cozii } public class TestCoadaCirculara{ public static void main(String[] args){ CoadaCirculara x=new CoadaCirculara(3,"X"); CoadaCirculara y=new CoadaCirculara(3,"Y"); x.adauga("aa"); y.adauga("aa"); if(x.equals(y)) System.out.println("X=Y"); y.adauga("aa"); if(x.equals(y)) System.out.println("X=Y"); } } Care afirmatie este adevarata: a. Programul afiseaza: X=Y X=Y b. Programul nu afiseaza nimic c. Programul afiseaza: X=Y d. Programul afiseaza: 3 17. Fie urmatoarele clase Java: class CoadaCirculara{ public CoadaCirculara(int n, String s){maxDim=n; nume=s; v= new Object[maxDim];} public boolean esteGoala(){return numarElemente==0;} public boolean estePlina(){return numarElemente==maxDim;} public void adauga(Object ob){ numarElemente++; ultim= (ultim+1)%maxDim; v[ultim]=ob; } public void elimina(){ numarElemente--; prim=(prim+1)%maxDim; } public Object element(){ return v[prim]; } public String nume(){return nume;} private Object v[]; private int maxDim; // numarul maxim de elemente private int prim=0;//pozitia primului element din lista private int ultim=-1; //pozitia elementului adaugat ultima data //lista are elementele in vectorul v, de la prim la ultim, //in sensul acelor de ceasrnic private int numarElemente=0; // numarul de elemente din coada private String nume;// numele cozii }
public class TestCoadaCirculara{ public static void main(String[] args){ CoadaCirculara x=new CoadaCirculara(3,"X"); CoadaCirculara y=new CoadaCirculara(3,"Y"); x.adauga("aa"); y.adauga("aa"); if(x.equals(y)) System.out.println("X=Y"); y.adauga("aa"); if(x.equals(y)) System.out.println("X=Y"); } } Care afirmatie este adevarata: a. Programul afiseaza: 3 b. Programul afiseaza: X=Y X=Y c. Programul afiseaza: X=Y d. Programul nu afiseaza nimic 18. Fie urmatoarele clase Java: class CoadaCirculara{ public CoadaCirculara(int n, String s){maxDim=n; nume=s; v= new Object[maxDim];} public boolean esteGoala(){return numarElemente==0;} public boolean estePlina(){return numarElemente==maxDim;} public void adauga(Object ob){ numarElemente++; ultim= (ultim+1)%maxDim; v[ultim]=ob; } public void elimina(){ numarElemente--; prim=(prim+1)%maxDim; } public Object element(){ return v[prim]; } public String nume(){return nume;} private Object v[]; private int maxDim; // numarul maxim de elemente private int prim=0;//pozitia primului element din lista private int ultim=-1; //pozitia elementului adaugat ultima data //lista are elementele in vectorul v, de la prim la ultim, //in sensul acelor de ceasrnic private int numarElemente=0; // numarul de elemente din coada private String nume;// numele cozii } public class TestCoadaCirculara{ public static void main(String[] args){ CoadaCirculara x=new CoadaCirculara(3,"X"); x.adauga("a"); x.adauga("b"); x.adauga("c"); x.adauga("d"); x.adauga("e"); x.adauga("f"); System.out.println(x.element()); } } Care afirmatie este adevarata: a. Programul afiseaza: b
b. Programul afiseaza: d c. Programul afiseaza: c d. Programul afiseaza: a 19. Fie urmatoarele clase Java: public interface Actualizare{ public void actualizareNume(String nume); public void actualizareVarsta(int varsta); } interface Afisare{ public void afisare(); public void actualizareVarsta(int varsta); } public class Persoana{ public Persoana(String nume, int varsta){ this.nume=nume; this.varsta=varsta; } public Persoana(){} protected String nume="XXXX"; protected int varsta=0; } class PersoanaSpecializata extends Persoana implements Actualizare, Afisare{ public void actualizareNume(String nume){this.nume=nume;} public void actualizareVarsta(int varsta){this.varsta=varsta;} public void afisare(){ System.out.println("nume= "+nume); System.out.println("varsta= " + varsta); } } public class Client{ public static void main(String args[]){ PersoanaSpecializata p=new PersoanaSpecializata(); Actualizare act=p; Afisare afis=p; act.actualizareNume("Ionescu"); act.actualizareVarsta(58); afis.afisare(); } } Care afirmatie este adevarata: a. Programul este incorect deoarece o clasa nu poate implementa dou ã interfete b. Programul este incorect deoarece metoda public void afisare() nu face parte din clasa Persoana c. Programul afiseaza: nume= Ionescu varsta= 58 d. Programul este incorect deoarece metoda public void actualizareVarsta(int varsta) nu face parte din clasa PersoanaSpecializata 20. Fie urmatorul program Java: import java.awt.*; import java.awt.event.*; class Model{ private int x=0; public Model(){}; public void actiune(){x++;System.out.println(x);}; } public class View extends Frame{ private Button b;
private Model m; private Controller c; public static void main(String args[]){ Frame f= new View(); } public View(){ setTitle("Exemplu Model-View-Controller"); b= new Button("Actiune"); add(b); m=new Model(); c=new Controller(m); b.addActionListener(c); setSize(100,50); setVisible(true); } } class Controller implements ActionListener{ private Model md; public Controller(Model p){ md=p; } public void actionPerformed(ActionEvent e){ md.actiune(); } } Care afirmatie este adevarata, dacã se face de douã ori click pe butonul stang mouse asupra butonului Actiune: a. Programul nu afiºeazã nimic b. Programul afiºeazã: 1 2 c. Valoarea atributului f.m.x rãmâne mereu la valoarea 0 d. Programul afiºeazã: 0 1 21. Fie urmatorul program Java: import java.awt.*; import java.awt.event.*; class Model{ private int x=0; public Model(){}; public void increment(){x++;} public int get_x(){return x;} } public class View extends Frame{ private Button b; protected Model m; private Controller c; protected TextField tf; public static void main(String args[]){ Frame f= new View(); } public View(){ setTitle("Exemplu Model-View-Controller"); b= new Button("Actiune"); add("North",b); m=new Model(); c=new Controller(this); b.addActionListener(c); tf=new TextField(10); add("Center",tf); setSize(100,250);
setVisible(true); } } class Controller implements ActionListener{ private View vw; public Controller(View v){ vw=v; } public void actionPerformed(ActionEvent e){ vw.m.increment(); vw.tf.setText(String.valueOf(vw.m.get_x())); } } Care afirmatie este adevarata, dacã se face de douã ori click pe butonul stang mouse asupra butonului Actiune: a. În câmpul de text f.tf este afiºatã valoarea 1 b. Programul nu afiºeazã nimic c. În câmpul de text f.tf este afiºatã valoarea 2 d. Valoarea atributului f.m.x rãmâne mereu la valoarea 0 22. Fie urmatorul program Java: import java.util.Observer; import java.util.Observable; import java.awt.*; import java.awt.event.*; public class Observator extends Frame implements WindowListener, Observer{ static protected ModelObservabil m=new ModelObservabil(); protected Button exitB, actB; protected TextField field; private ButtonController buttonC; public static void main(String args[]){ Frame fn=new Observator(0);// nu observa pe m Frame f01=new Observator(1);// observa pe m Frame f02=new Observator(1);// observa pe m } public Observator(int i){ if (i==1)m.addObserver(this); Panel p= new Panel(); buttonC=new ButtonController(this); exitB= new Button("Exit"); exitB.addActionListener(buttonC); actB= new Button("modifica"); actB.addActionListener(buttonC); field= new TextField("MyTextField"); field.setEditable(true); p.add(exitB); p.add(actB); add(field); add("North",p); addWindowListener(this); setSize(160,110); setVisible(true); } public void windowClosed(WindowEvent e){} public void windowOpened(WindowEvent e){} public void windowIconified(WindowEvent e){} public void windowDeiconified(WindowEvent e){} public void windowActivated(WindowEvent e){} public void windowDeactivated(WindowEvent e){} public void windowClosing(WindowEvent e){dispose(); //System.exit(0); }
public void update(Observable observ, Object ob){ field.setText(m.afis); } } class ButtonController implements ActionListener{ Observator view; public ButtonController(Observator win){ view=win; } public void actionPerformed (ActionEvent e){ Object source=e.getSource(); if (source == view.exitB) System.exit(0); else { view.m.modifica(); }; } } class ModelObservabil extends Observable{ protected int i=0; protected String afis=" "; public ModelObservabil(){ setChanged(); notifyObservers(); } public void modifica(){ i++; afis= " "+ i; setChanged(); notifyObservers(); } } Care afirmatie este adevarata, dacã se face de click pe butonul stang mouse asupra butonului „modifica” din fereastra fn: a. Doar in câmpul de text field al ferestrei fo2 este afiºatã valoarea actualizata a atributului Observator.m.i b. În câmpul de text field al tuturor ferestrelor este afiºatã valoarea actualizata a atributului Observator.m.i c. Doar in câmpul de text field al ferestrei fo1 este afiºatã valoarea actualizata a atributului Observator.m.i d. Doar in câmpul de text field al ferestrelor fo1 si fo2 este afiºatã valoarea actualizata a atributului Observator.m.i 23. Fie urmatorul program Java: import java.util.Observer; import java.util.Observable; import java.awt.*; import java.awt.event.*; public class Observator extends Frame implements WindowListener, Observer{ static protected ModelObservabil m=new ModelObservabil(); protected Button exitB, actB; protected TextField field; private ButtonController buttonC; public static void main(String args[]){ Frame fn=new Observator(0);// nu observa pe m Frame f01=new Observator(1);// observa pe m Frame f02=new Observator(1);// observa pe m } public Observator(int i){ if (i==1)m.addObserver(this); Panel p= new Panel(); buttonC=new ButtonController(this); exitB= new Button("Exit");
exitB.addActionListener(buttonC); actB= new Button("modifica"); actB.addActionListener(buttonC); field= new TextField("MyTextField"); field.setEditable(true); p.add(exitB); p.add(actB); add(field); add("North",p); addWindowListener(this); setSize(160,110); setVisible(true); } public void windowClosed(WindowEvent e){} public void windowOpened(WindowEvent e){} public void windowIconified(WindowEvent e){} public void windowDeiconified(WindowEvent e){} public void windowActivated(WindowEvent e){} public void windowDeactivated(WindowEvent e){} public void windowClosing(WindowEvent e){dispose(); //System.exit(0); } public void update(Observable observ, Object ob){ field.setText(m.afis); } } class ButtonController implements ActionListener{ Observator view; public ButtonController(Observator win){ view=win; } public void actionPerformed (ActionEvent e){ Object source=e.getSource(); if (source == view.exitB) System.exit(0); else { view.m.modifica(); }; } } class ModelObservabil extends Observable{ protected int i=0; protected String afis=" "; public ModelObservabil(){ setChanged(); notifyObservers(); } public void modifica(){ i++; afis= " "+ i; setChanged(); notifyObservers(); } } Care afirmatie este adevarata, dacã se face de click pe butonul stang mouse asupra butonului „modifica” din fereastra fo1 sau fo2: a. Doar in câmpul de text field al ferestrelor fo1 si fo2 este afiºatã valoarea actualizata a atributului Observator.m.i b. În câmpul de text field al tuturor ferestrelor este afiºatã valoarea actualizata a atributului Observator.m.i c. Doar in câmpul de text field al ferestrei fo1 este afiºatã valoarea actualizata a atributului Observator.m.i d. Doar in câmpul de text field al ferestrei fo2 este afiºatã valoarea actualizata a atributului Observator.m.i
C++ 1. Fie urmatorul program: // Public redeclarat private // #include
class A{ public: void m(){cout<<"A:m()"<<endl;}; virtual void v(){cout<<"A:v()"<<endl;}; }; class B: public A{ private: void m(){cout<<"B:m()"<<endl;}; virtual void v(){cout<<"B:v()"<<endl;}; }; void main(){ A a,*p; B b; b.m(); b.v(); // obiect de tip A p=&a; p->m(); p->v(); // obiect de tip B p=&b; p->m(); p->v(); } Care expresie este incorecta: a. b.v(); b. p=&a; c. p->m(); d. p->v(); 2. Fie urmatorul program: // Public redeclarat private #include class A{ public: void m(){cout<<"A:m()"<<endl;}; virtual void v(){cout<<"A:v()"<<endl;}; }; class B: public A{ private: void m(){cout<<"B:m()"<<endl;}; virtual void v(){cout<<"B:v()"<<endl;}; }; void main(){ A a,*p; B b; b.m(); b.v(); // obiect de tip A p=&a; p->m(); p->v(); // obiect de tip B p=&b; p->m(); p->v(); } Care expresie este corecta: a. b.m(); b. b.v(); c. p->f(); d. p->m(); 3. Fie urmatorul program:
// Public redeclarat private #include class A{ public: void m(){cout<<"A:m()"<<endl;}; virtual void v(){cout<<"A:v()"<<endl;}; }; class B: public A{ private: void m(){cout<<"B:m()"<<endl;}; virtual void v(){cout<<"B:v()"<<endl;}; }; void main(){ A a,*p; B b; b.m(); b.v(); // obiect de tip A p=&a; p->m(); p->v(); // obiect de tip B p=&b; p->m(); p->v(); } Care expresie este corecta: a. b.m(); b. b.v(); c. p->f(); d. p->v(); 4. Fie urmatorul program: // Public redeclarat private // Metoda PRIVATE DEVINE ACCESIBILA PRIN MECANISMUL DE LEGARE DINAMICA #include class A{ public: void m(){cout<<"A:m()"<<endl;}; virtual void v(){cout<<"A:v()"<<endl;}; }; class B: public A{ private: void m(){cout<<"B:m()"<<endl;}; virtual void v(){cout<<"B:v()"<<endl;}; }; void main(){ A a,*p; B b; b.m(); b.v(); // obiect de tip A p=&a; p->m(); p->v(); // obiect de tip B p=&b; p->m(); p->v(); } Care expresie este incorecta: a. b.m(); b. p=&a; c. p->m(); d. p->v(); 5. Fie urmatorul program: #include 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<
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. 3200 b. 3301 c.
3311
d. 3212 7.
Fie programul:
#include 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< #include 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<getName()<<endl; cout<getName()<<endl; cout<<S::getNr()<<endl; getch(); } Programul afiseaza: a. Matematica Informatica 1 b. Informatica Informatica 1 c. Informatica Informatica 2 d. Matematica Informatica 2 9. Se considera clasa: #include "iostream.h" template class 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 C::C(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new T [nrmax-1]; } template void C::put(T e){ support[free]=e; free= ++free % nrmax; nrelem++; } template T C::get(){ return support[first]; } template void C::remove(){ first= ++first % nrmax; --nrelem; }
a. b. c. d.
Clasa C defineste o structura de tip coada (FIFO) Clasa C defineste o structura de tip stiva (LIFO) Clasa C este un vector Clasa C este abstracta
10. 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 //elements.h #include "abselem.h" #include "iostream.h" class Person: public AbstractElem{ public: Person(char *name); virtual void display(); virtual void process(); private: char *name; }; class Car: public AbstractElem{ public: Car(char *name); virtual void display(); virtual void process(); private: char *name; }; //driver.cpp #include "elements.h" #include "LIST.h" LIST x(3);
void main(){ x.put(new Person("Tudor")); x.put(new Person("Andrei")); x.put(new Car("B-39-TDR")); x.get()->process(); x.remove(); x.get()->process(); x.remove(); x.get()->process(); x.remove(); } //LIST.cpp #include "LIST.h" LIST::LIST(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new AbstractElem* [nrmax-1]; } void LIST::put(AbstractElem * pe){ support[free]=pe; free= ++free % nrmax; nrelem++; } AbstractElem* LIST::get(){ return support[first]; } void LIST::remove(){ first= ++first % nrmax; --nrelem; } //elements.cpp #include "elements.h" Person::Person(char *name):name(name){}; void Person::display(){cout< class B{ public: ~B(){cout<<"~B()"<<endl;} }; class D: public B{ public: ~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() b. ~ B() ~D() c. ~ B()~D()~B() ~D() d. ~ B() ~D() ~B() 12. Fie urmatorul program: // Constructor cu semantica prin referinta // Operatorul = este cel implicit #include class C{ public: C(int n=0, int v[]); void set(int i, int val){pi[i]=val;} friend
ostream& operator<<(ostream &o, const C&);
private: int dim; int *pi; }; C::C(int n, int v[]) dim=n; pi= v;
{
} ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); x=y; y.set(0,-1000); cout<<x<<endl; } Programul afiseaza: a. -100 20 b. -1000 20 c. 100 2 3 d. 1 20 30 13. Fie programul: #include class B{ public: void st(){cout<< "static method st() of B"<<endl;} virtual void v(){cout<< "virtual method v() of B"<<endl;} }; class D: public B{ public: void st(){cout<< "static method st() of D"<<endl;} virtual void v(){cout<< " virtual method v() of D"<<endl;} };
int main(){ B *pb; D d; // pointing to a subclass pb=&d; ((D*)pb)->v(); ((D*)pb)->st(); return 0; } Programul afiseaza: a. virtual method v() of D static method st() of D b. virtual method v() of B static method st() of D c. virtual method v() of D static method st() of B d. virtual method v() of B static method st() of B 14. Fie programul: #include 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(); pb->v(); return 0; } Programul afiseaza: a. static method s() of D virtual method v() of D b. static method s() of B virtual method v() of B c. static method s() of D virtual method v() of B d. static method s() of B virtual method v() of D
15. Fie programul #include <string.h>#include class Person{public: Person(char *p){nr=0; name=new char[strlen(p)+1]; strcpy(name,p); nr++; cout<
// 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 class B{ public: B(){cout<<"B()"<<endl;} B(B &b){cout<<"B(B &b)"<<endl;} }; class D: public B{ public: D(){cout<<"D()"<<endl;} }; void main(){ B b; // apel B() B b1(b); // apel B(B & ); nu se mai utilizeaza B()! D d; // apel B();D() D d1(d); B bd(d); // conversie implicita la clasa de baza; getch(); } Programul afiseaza : 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) c. B() B(B&b) B() D() B(B &b) B(B &b) d. B() B(B&b) D() B(B &b) D() B(B &b) 17. Fie programul: //destructor explicit #include <string.h> #include class Person{ public: Person(char *p){name=new char[strlen(p)+1]; strcpy(name,p);} ~Person(){delete[] name;} private: char *name; }; void f(){Person *p = new Person("Balanescu"); delete p; // fara aceasta instructiune, obiectele se acumuleaza // in heap si blocheaza executarea, spre deosebire de Java } void main(){ while(1)f(); } a. La iesirea din functia f(), spatiul alocat pentru sirul de caractere “Balanescu” nu este eliberat si memoria va fi epuizata b. La iesirea din functia f(), spatiul alocat pentru sirul de caractere “Balanescu” este eliberat c. Programul se termina datorita epuizarii memoriei d. Programul se termina dupa primul apel al functiei f() 18. Fie urmatorul program: #include 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 19. Fie urmatorul program: // Constructor cu semantica prin referinta// Operatorul = este cel implicit #include 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; } Programul afiseaza: a. instructiunea int=100; este incorecta b. . instructiunea int=10; este incorecta c. . instructiunea int=1; este incorecta d. . instructiunea int=2; este incorecta e. . 10 20 20. Fie programul : #include class Cerc{ public: Cerc(float r):raza(r){} float getRaza(){return raza;} void operator++(){raza++;} private: float raza; }; class Cilindru: public Cerc{ public: Cilindru(float raza, float inaltime):Cerc(raza), inaltime(inaltime){}; void operator++(){inaltime++;} float getInaltime(){return inaltime;} private: float inaltime;
}; void main(){ Cerc *pc; Cilindru c(1,5); pc=&c; ++ *pc; cout<getRaza()<<" "< #include class Person{ public: Person(char *p){name=new char[strlen(p)+1]; strcpy(name,p); nr++; cout< #include <string.h> #include class Person{ public: Person(char *p){name=new char[strlen(p)+1]; strcpy(name,p); nr++; cout<
getch(); } Programul afiseaza: a. 1 2 3 4 5 b. 1 1 1 1 1 c. 0 0 0 0 0 d. 0 1 2 3 4 23. Fie programul: class Persoana{ public: Persoana(char * n){nume=n;} void afisare(){cout< class B{ public: virtual ~B(){cout<<"~B()"<<endl;} }; class D: public B{ public: virtual ~D(){cout<<"~D()"<<endl;} }; void main(){ B *pb; D *pd; pd= new D(); pb=new D(); delete pb; delete pd; } Programul afiseaza: a. ~ B()~D()~B() ~D() b. ~ B() ~B() ~D() c. ~ B() ~D() d. ~ D()~B()~D() ~B() 25. Fie programul: #include class A{ public: // supraincaracre void s() void s(){cout<<"void A::s()"<<ENDL;} void s(int i){i++;cout<<"void A::s(int)"< // 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()"<
// 2. specializare metoda statica void s(int i){i++;cout<<"void B::s(int)"< // 3. specializare metoda virtuala virtual void v(int i){i++;cout<<"virtual void B::v(int)"<<ENDL;} }; void main(){ A *pa; B b; pa=&b; pa->s(); pa->v(1); } Prin executarea sa, programul afiseaza: a) void B::v() void A::v(int) b) void A::v() void B::v(int) c) void A::s() void B::v(int) d) void A::v() void A::v(int) 26. Fie următorul program C++: #include 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: a. Expresia p->v()este incorectă deoarece metoda v este inaccesibilă b. Programul afiseaza mesajul: A:m() B:(v) c. Programul afisează mesajul: A:v() d. Expresia a.m() este incorectă deoarece metoda m este inaccesibilă 27. Fie următorul program C++: #include 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; } }; Care din afirmatiile următoare sunt adevărate: a. //1. este incorectă b. //2. este incorectă c. //3. este incorectă d. //4. este incorectă 28. Fie următorul program C++, în care operatorul de insertie << este supraîncărcat. Operatorul de atribuire = este cel predefinit, cu semantica prin referinta. #include 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
1000 20 1000 20 29. Fie următorul program C++, în care operatorul de insertie << si operatorul de atribuire = sunt supraîncărcati. Prin supraîncărcare, operatorul de atribuire are semantica prin valoare (el înlocuieste pe cel predefinit, care are semantica prin referintă). Rersursele obiectului destinatie d din expresia d=s sunt eliberate chiar si în cazul de autoatribure d=d. #include 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
d. Programul afisează: 10 20 10 20 10 20 30. 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. #include 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
xx yy d. Programul afisează: 10 20 10 20 10 20 31. Fie următorul program C++, unde functia abs calculează valoarea absolută a unui număr real: #include void abs(float &x){if (x<0)x=-x;} void main(){ float a=-1; abs(a); cout<<"a="< class Punct{ public: Punct(int=0, int=0); //constructor protected: int x,y; friend ostream& operator<<(ostream&, const Punct&); }; class Cerc: public Punct{ public: Cerc(double r=0.0, int x=0, int y=0);// constructor protected: float raza; friend ostream& operator<<(ostream&, const Cerc&); }; //implementare Punct Punct::Punct(int a, int b):x(a),y(b){} // constructor ostream& operator<<(ostream& output, const Punct& p){ output<<"Punct"<<'['<
}; void main(){ B b; B b1(b); D d; D d1(d); B bd(d); } Care din afirmatiile următoare sunt adevărate: a. Programul afisează: B() B(B &b) B() D() B(B &b) B(B &b) b. Programul afisează: B() B() B() D() B(B &b) B(B &b) c. Programul afisează: B() B() B(B &b) D() B(B &b) B(B &b) d. programul afisează: B() B(B &b) B() D() B() B() 34. Fie următorul program C++: // destructor static #include #include class B{ public: B(){cout<<"B()"<<endl;} ~B(){cout<<"~B()"<<endl;} }; class D: public B{ public: D(){cout<<"D()"<<endl;} ~D(){cout<<"~D()"<<endl;} }; void main(){ clrscr(); B *b=new B(); // apel B() delete b; b=new D(); // apel B();D() delete b; } Care din afirmatiile următoare sunt adevărate: a. Programul afisează: B() ~B() B() D() ~D() b. Programul afisează: B() ~B() B() D() ~B() c. Programul afisează: B() ~B() B() ~B() d. Programul afisează: B() ~B() D() ~B() 35. Fie următorul program C++: // destructor virtual #include 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(){ clrscr();
B *b=new B(); delete b; b=new D();
// apel B() // apel B();D(); // destructorii, in ordine inversa
delete b; } Care din afirmatiile următoare sunt adevărate: a. Programul afisează: B() ~B() B() D() ~D() ~B() b. Programul afisează: B() ~B() B() D() ~B() ~B() c. Programul afisează: B() ~B() B() D() ~B() ~D() d. Programul afisează: B() ~B() B() D() ~B() 36. Fie următorul program C++: #include <string.h> #include 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: 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 c. Programul nu se termină, deoarece conditia de continuare din instructiunea while este mereu îndeplinită d.Programul se blochează la epuizarea memoriei heap 37. Fie următorul program C++: #include class Persoana{ public: Persoana(char * n){nume=n;} void afisare(){cout<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: a. Expresia faddress(&q); este eronată; b. Instructiunea de declarare Persoana q="Balanescu"; este eronată; c. Expresia p->afisare() este eronată; d. Programul afisează: Balanescu Balanescu Balanescu Tudor Tudor 38. Fie următorul program C++: #include 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=”<<<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 b. Programul afisează i=2 c. Programul afisează i=0 d. Programul afisează i=1 39. Fie următorul program C++: #include class B{ public: B(int i=-1):valB(i){} B& operator=(const B &b){ valB=b.valB; cout<<"B::op= "; return *this; } private: int valB; }; class D:public B{ public: D(int i, int j):B(i),valD(j){} D& operator=(const D &d){ valD=d.valD;
cout<<"D::op= "; return *this; } private: int valD; }; void main(){ B b(0), b1(1); B *pB; D d(0,0), d1(1,1); b=b1; d=d1; b=d; pB=&d; *pB=d; pB->operator=(d); } Care din afirmatiile următoare sunt adevărate: a. Programul afisează : B::op= D::op= D::op= B::op= D::op= b. Programul afisează: B::op= D::op= B::op= B::op= B::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= 40. Fie următorul program C++: class A{ int x; public: A(int x):x(x){}; }; class B{ protected: int x; public: B(int x):x(x){}; }; class D:public B{ A a; B b; // 1 B b(1); // 2 public: void m(){ x=1; // 3 //b.x=1; //x nu este accesibil obiectelor } }; void main(){ B b(1); // 4 } Care din următoarele instructiuni sunt eronate: a. B b; // 1 b. B b(1) ; // 2 (din clasa D) c. x=1; // 3 d. B b(1); // 4 (din functia main) 41. Fie urmatorul program class A{ int x; public:
A(int x):x(x){}; }; class B{ protected: int x; public: B(int x):x(x){}; }; class D:public B{ A a; B b; // 1 public: void m(){ x=1; // 2 b.x=1; //3 } }; void main(){ B b(1); // 4 } Care din următoarele instructiuni sunt eronate: a. B b; // 1 b. x=1 // 2 c. b.x=1; // 3 d. B b(1); // 4 (din functia main) 42. Fie urmatorul program: #include 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? 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) 43. Fie programul urmator: #include class Calculator{ private: int value; int keep; char toDo; public: void add(){ keep=value; //keep first operand value=0; //get ready for the second operand toDo='+'; // what to do later } void subtract(){ keep=value; //keep first operand value=0; //get ready for the second operand toDo='-'; // what to do later } void multiply(){ keep=value; //keep first operand value=0; //get ready for the second operand toDo='*'; // what to do later } void compute(){ if (toDo=='+') value += keep; else if (toDo == '-') value = keep-value; else if (toDo == '*') value *= keep; } void clear(){value=keep=0;} void digit (int x){value=value*10+x;} int display(){ return value;} Calculator(){clear();} }; void main(){ Calculator c; c.digit(1); c.digit(0); c.add(); c.digit(2); c.digit(0); c.compute();
c.add(); c.digit(5); c.compute(); cout< 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? a. C ::set_i(int) C::get_i() const C::get_i() b. C ::set_i(int) C::get_i() C::get_i() c. C ::set_i(int) C::get_i() C::get_i()const d. C ::set_i(int) C::get_i() const C::get_i()const 45. 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 d. instructiunile // 2, // 3 si // 4 sunt toate incorecte 46. Care este varianta corecta de completare a urmatoarei specificari (incomplete ) a clasei Data #include class Data{ public: // metode si operatori private: int zi,luna, an; }; astfel incat programul urmator void main(){ Data d, e(31,12,2002); cout<
ostream& operator<<(ostream&, Date &); 47. Fie următorul program C++, unde funcŃia abs calculează valoarea absolută a unui număr real: #include void abs(float &x){if (x<0)x=-x;} void main(){ float a=-1; abs(a); cout<<"a="< class Punct{ public: Punct(int=0, int=0); //constructor protected: int x,y; friend ostream& operator<<(ostream&, const Punct&); }; class Cerc: public Punct{ public: Cerc(double r=0.0, int x=0, int y=0);// constructor protected: float raza; friend ostream& operator<<(ostream&, const Cerc&); }; //implementare Punct Punct::Punct(int a, int b):x(a),y(b){} // constructor ostream& operator<<(ostream& output, const Punct& p){ output<<"Punct"<<'['<
B bd(d); } Care din afirmaŃiile următoare sunt adevărate: a. Programul afisează: B() B(B &b) B() D() B(B &b) B(B &b) b. Programul afisează: B() B() B() D() B(B &b) B(B &b) c. Programul afisează: B() B() B(B &b) D() B(B &b) B(B &b) d. programul afisează: B() B(B &b) B() D() B() B() 50. Fie următorul program C++: #include 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=”<<<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 afirmaŃiile următoare sunt adevărate: a. Programul afisează i=-1 b. Programul afisează i=2 c. Programul afisează i=0 d. Programul afisează i=1 51. Fie următorul program C++: class A{ int x; public: A(int x):x(x){}; }; class B{ protected: int x; public: B(int x):x(x){}; }; class D:public B{ A a; B b; // 1 B b(1); // 2 public: void m(){
x=1; // 3 //b.x=1; //x nu este accesibil obiectelor } }; void main(){ B b(1); // 4 } Care din următoarele instrucŃiuni sunt eronate: a. B b; // 1 b. B b(1); // 2 (din clasa D) c. x=1; // 3 d. B b(1); // 4 (din funcŃia main) 52. Fie urmatoarea specificare de clasa: // file abslist.h #ifndef ABSLIST_H #define ABSLIST_H #include "d:\tudor\c_cpp\abstract\abselem.h" class AbstractList{ public: virtual void erase()=0; virtual void put(AbstractElem* ae){}; virtual AbstractElem* get(){}; virtual int isEmpty(){}; virtual int isFull(){}; }; #endif Care afirmatie este corecta: a. isEmpty() este metoda virtuala pura b.AbstractList este o clasa concreta c. AbstractList este o clasa abstracta d. obiectele clasei pot fi construite cu AbstractList(); 53. 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 a. Construcorul Complex(float, float) trebuie declarat inaintea metodei Punct:: operator Complex() b. Constructorul Punct (float, float) trebuie declarat inaintea metodei Punct:: operator Complex() c. Este metoda friend a clasei Complex ???? d. Este metoda friend a clasei Punct
54. Fie programul: // file Calc.h class Calculator{ private: int value; int keep; char toDo; public: void add(); void multiply(); void compute(); void clear(); void digit (int x); int display(); Calculator(); }; //file Calc.cpp #include "Calc.h" void Calculator::clear(){ value=keep=0; } int Calculator::display(){ return value;} void Calculator::digit(int x){value=value*10+x;} void Calculator::add(){ keep=value; //keep first operand value=0; //get ready for the second operand toDo='+'; // what to do later } void Calculator::multiply(){ keep=value; //keep first operand value=0; //get ready for the second operand toDo='*'; // what to do later } void Calculator::compute(){ if (toDo=='+') value += keep; else if (toDo == '*') value *= keep; } Calculator::Calculator(){clear();} //file testdriver.cpp #include #include "Calc.h" void main(){ Calculator c; c.digit(1);c.digit(0); c.add(); c.digit(2);c.digit(0); c.compute(); c.add(); c.digit(5); c.compute(); cout<
Programul afiseaza a. 35 205 b.10 20 c. 205 35 d. 20 10 55. Fie programul: #include "iostream.h" template 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 Fifo::Fifo(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new T [nrmax-1]; } template void Fifo::put(T e){ support[free]=e; free= ++free % nrmax; nrelem++; } template T Fifo::get(){ return support[first]; } template void Fifo::remove(){ first= ++first % nrmax; --nrelem; } class Person { public: Person(char *name); Person(); //necesar pentru a intializa tablouri virtual void display(); virtual void process(); private: char *name; }; class Car { public: Car(char *name); Car(); virtual void display(); virtual void process(); private: char *name; }; Person::Person(char *name):name(name){}; Person::Person(){}; void Person::display(){cout<
void Person::process(){ cout<<"A Person: "; display(); } Car::Car(char *name):name(name){}; Car::Car(){}; void Car::display(){cout< queuePerson(3); Fifo queueCar(3); void main(){ queuePerson.put(Person("Andrei")); queuePerson.put(Person("Tudor")); queueCar.put(Car("B-39-TDR")); queuePerson.get().process(); queuePerson.remove(); queueCar.get().process(); queueCar.remove(); queuePerson.get().process(); queuePerson.remove(); } Programul afiseaza: a. A Person: Andrei A Car:B-39-TDR A Person: Tudor b. c. d. 56.Fie programul // constructor de copiere atat in clasa de baza cat si in clasa derivata // constructorul de copiere din clasa derivata utilizeaza pe B() pentru constructia // // subobiectului B #include class B{ public: B(){cout<<"B()"<<endl;} B(B &b){cout<<"B(B &b)"<<endl;} }; class D: public B{ public: D(){cout<<"D()"<<endl;} D(D &d){cout<<"D(D &d)"<<endl;} }; void main(){ B b; // apel B() B b1(b); // apel B(B & ); nu se mai utilizeaza B()! D d; // apel B();D() D d1(d); // nu se apeleaza B(B &b) } Programul afiseaza : a. B() B(B&b) B() D() B(B &b) D(D &d) b. B() B(B&b) B() D() B() D(D &d) c. B() B() B(B&b) B() D() B(B &b) D() B(B &b) d. B() B(B&b) D() B(B &b) D() B(B &b) 57. Fie urmatorul program: // Constructor cu semantica prin referinta // Operatorul = este cel implicit #include class C{
public: C(int n=0, int v[]); friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= v; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); a[0]= -100; cout<<x<<endl; } Programul afiseaza: a. -100 2 3 b. 1 2 3 c. 100 2 3 d. 1 20 30 58. 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 c. LIST este o clasa abstracta d. LIST este un vector 59. Fie urmatoarea specificare de clase: class Complex; class Punct{ public: Punct(float x=0, float y=0):x(x),y(y){} operator Complex(); operator float(){return x;} private: float x,y; }; class Complex{ public: Complex(float x=0, float y=0):x(x),y(y){} operator Punct(){return Punct(x,y);} operator float(){return x;} private: float x,y; }; Metoda Complex:: operator float() este utilizata pentru a. Conversia unui numar real in obiect Complex b. Conversia unui obiect Complex in obiect Punct c. Conversia obiectelor Complex in numere reale d. Conversia unui obiect Punct in obiect Complex
60. Fie urmatorul program: #include class A{ public: // supraincaracre void s() void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int)"<<endl; } // supraincarcare void v() virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;} }; class B:public A{ public: // 1. supraincarcare metoda statica int s(){cout<<"int B::s()"<<endl; return 1;} // 2. specializare metoda statica void s(int i){i++;cout<<"void B::s(int)"<<endl; } // 3. specializare metoda virtuala virtual void v(int i){i++;cout<<"virtual void B::v(int)"<<endl;} }; void main(){ A *pa; B b; pa=&b; pa->v(); pa->s(1); }
Prin executarea sa, programul afiseaza: a. void B::v() void A::v(int) b. void A::v() void B::v(int) c. void A::v() void A::v(int) d. void B::v() void A::s(int)
61. Fie programul: #include class Cerc{ public: Cerc(float r):raza(r){} float getRaza(){return raza;} Cerc& operator++(){raza++;return *this;}// return by reference Cerc operator--(){raza--;return *this;}// return by value private: float raza; }; void main(){ Cerc c(1.0); cout<<(++(++c)).getRaza()<<” ”; cout< class A{ public: // supraincaracre void s() void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int)"<<endl; } // supraincarcare void v() virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;} }; class B:public A{ public: // 1. supraincarcare metoda statica int s(){cout<<"int B::s()"<<endl; return 1 ;} // 2. specializare metoda statica void s(int i){i++;cout<<"void B::s(int)"<<endl; } // 3. specializare metoda virtuala virtual void v(int i){i++;cout<<"virtual void B::v(int)"<<endl;} }; void main(){ A *pa; B b; pa=&b; pa->s(); pa->v(1); } Prin executarea sa, programul afiseaza: a. void B::v() void A::v(int) b. void A::v()
void B::v(int) c. void A::s() virtual void B::v(int) d. void A::v() void A::v(int) 63. Se considera clasa: #include "iostream.h" template 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 C::C(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new T [nrmax-1]; } template void C::put(T e){ support[free]=e; free= ++free % nrmax; nrelem++; } template T C::get(){ return support[first]; } template void C::remove(){ first= ++first % nrmax; --nrelem; } a. Clasa C este o clasa generica b. Clasa C este o clasa abstracta c. Clasa C este derivata din clasa T d. Clasa T este derivata din clasa C
JAVA 1- A ,2-B ,3-C ,4-A ,5-D ,6-B ,7-C ,8-A ,9-B ,10-A ,11-B ,12-C ,13-D ,14-A ,15-B, 16-C ,17-D ,18-B ,19-C ,20-B ,21-C ,22-D ,23-A C++ 1-A, 2-D, 3-D, 4-A, 5-C, 6-?, 7-A, 8-B, 9-A, 10-A, 11-D, 12-B, 13-A, 14-D, 15-?, 16-C, 17-B, 18-A, 19-E, 20-B, 21-A, 22-A, 23-?, 24-D, 25-C, 26A, 27-D, 28-B, 29-A, 30-D, 31-A, 32-D, 33-A, 34-B, 35-A, 36-C, 37-D, 38-C, 39-B, 40-B, 41-C, 42-A, 43-C, 44-C, 45-A, 46-A, 47-A, 48-D, 49-A, 50-C, 51-B, 52-C, 53-A,B?, 54-A, 55-A, 56-B, 57-A, 58A, 59-B 60-C, 61-D, 62-C, 63-A