Sei sulla pagina 1di 3

Corso di Laboratorio di Programmazione

Esempio di prova scritta – parte A

Quiz
Per ciascuna risposta, selezionare vero o falso.

1) La dichiarazione di una reference crea:


• una nuova variabile [V] [F]
• un alias a una variabile esistente [V] [F]
• un puntatore [V] [F]
• un indirizzo [V] [F]

2) Che istruzione è necessario utilizzare per deallocare la memoria allocata con l'istruzione
seguente:

student_list = new students[size]

• delete []student_list [V] [F]


• delete student_list [V] [F]
• delete[] students [V] [F]
• delete students[size] [V] [F]

3) Quale dei seguenti non definisce uno scope?

• namespace [V] [F]


• funzione [V] [F]
• classe [V] [F]
• espressione [V] [F]

4) La direttiva #include:

• è gestita dal preprocessore prima dell'azione del compilatore [V] [F]


• è gestita dal compilatore prima dell'azione del preprocessore [V] [F]
• è gestita dal linker alla fine del processo di compilazione [V] [F]
• è gestita dal compilatore dopo l'azione del preprocessore [V] [F]

5) L'output del preprocessore è:

• un file di testo (sorgente c++) [V] [F]


• un file oggetto [V] [F]
• un file eseguibile [V] [F]
• un file contenente codice macchina [V] [F]

6) Selezionare l'affermazione falsa.


• Una reference può essere spostata da un oggetto a un altro [V] [F]
• Una reference deve necessariamente essere inizializzata in fase di definizione [V] [F]
• Una reference può essere usata per evitare la copia di un oggetto nel passaggio di
argomenti a funzione [V] [F]
• Una reference permette l'accesso sia in scrittura che in lettura [V] [F]

7) Selezionare l'affermazione falsa. Una enumerazione:

• è un tipo definito dall'utente [V] [F]


• descrive una scelta tra un insieme finito di opzioni [V] [F]
• può contenere membri privati [V] [F]
• può definire uno spazio di nomi [V] [F]

8) L'overloading degli operatori:

• può essere effettuato solo se uno degli operandi è un UDT [V] [F]
• permette di trasformare un operatore binario in ternario [V] [F]
• deve essere implementato per ogni UDT introdotto nel codice [V] [F]
• richiede l'utilizzo della keyword "operator" all'utente che usa l'operatore [V] [F]

9) Si consideri il seguente codice:

#include <iostream>
using namespace std;

int main()
{
int *p = new int[10];
for (int i = 0; i < 10; ++i)
p[i] = i;
int *q = &p[3];
cout << q[-2] << endl;

return 0;
}

Compilazione, linking ed esecuzione che risultato danno?


• errore di compilazione [V] [F]
• errore di esecuzione [V] [F]
• è stampato: 1 [V] [F]
• è stampato: 2 [V] [F]

10) Sia data la classe MyClass e uno std::vector<MyClass> v. L'istruzione:

std::vector<MyClass> v2 = v;

è accettata dal compilatore?

• Sì [V] [F]
• No [V] [F]
• Sì, se è definito il costruttore di copia di MyClass [V] [F]
• No, tranne quando è definito il costruttore di default di MyClass [V] [F]
Domande a risposta aperta
1) Illustrare il concetto di libreria in C++. Spiegare la differenza tra librerie statiche e librerie
dinamiche, evidenziando per ciascuna tipologia quali sono i punti di forza e di debolezza.

2) Spiegare il concetto di template. Mostrare un esempio di function template specificato per due
tipi diversi, illustrando qual è il comportamento del compilatore in questa situazione.

3) Calcolare l'output del seguente programma senza usare strumenti elettronici (non è possibile
copiare il codice, compilarlo ed eseguirlo!), ma solo leggendo il codice. Motivare la risposta.

#include <iostream>
using namespace std;

void HelpMe(int *p, int *num, int *q);


void WhereAmI(int *p, int *q, int a);

void HelpMe(int *p, int *num, int *q) {


int a;

a = 2;
q = &a;
*p = *q + *num;
num = p;
}

void WhereAmI(int *p, int *q, int a) {


a = 6;
*p = a + *p;
*q = a + 3;
HelpMe(q, &a, p);
}

int main() {
int *p;
int q;
int *num;
int a;

a = 3;
q = 5;
p = &a;
num = &q;

HelpMe(&a, p, num);
WhereAmI(&q, p, *num);

cout << "*p = " << *p << " q = " << q << " *num = " << *num << endl;

return 0;
}

Potrebbero piacerti anche