Quiz 001017

Dato il seguente frammento di codice:


class C1 { public: C1(int counter = 0) { m_counter = counter; } void stampa(char ch,int counter = 0) { if(!counter) counter = m_counter; while (counter-- > 0) putchar(ch); } private: int m_counter; }; C1 c1(4),c2; c1.stampa('x'); c1.stampa('y',3); c1.stampa('z',2); c2.stampa('y');
cosa viene visualizzato?
Axxxxyyyzz
Bxxxxyyyzzyyyy
Cyyyzz
Dyyyzzyyyy
Exxxxyyyyyyy

Quiz 001021

Sia dato il seguente frammento di codice:


template <typename T> inline void swap(T &a, T &b) { T t = a; a = b; b = t; }
...
class Vettore { public: Vettore(int numElem) { m_numElem = numElem;
m_v = new int [m_numElem]; }
~Vettore() { delete [] m_v; } void insert(int valore); ... private:
int m_numElem; int *m_v; };

Il metodo insert ha il compito di inserire valore in prima posizione nel vettore, spostando di 1 verso gli indici alti tutti gli altri elementi del vettore (l'ultimo viene perso); ad esempio:

Vettore x(10);
... // x viene inizializzato a { 1,2,3,4,5,6,7,8,9,10 }
x.insert(55);
// x contiene { 55,1,2,3,4,5,6,7,8,9 }

Qual è una possibile versione corretta del metodo insert?
A
void Vettore::insert(int valore)
{
for(int j = 0; j < m_numElem; j++)
swap(m_v[j],valore);
}
B
void Vettore::insert(int valore)
{
for(int j = 1; j < m_numElem; j++)
swap(m_v[j],valore);
}
C
void Vettore::insert(int valore)
{
for(int j = m_numElem; j >= 0; j--)
swap(m_v[j],valore);
}
D
void Vettore::insert(int valore)
{
for(int j = m_numElem - 1; j >= 0; j--)
swap(m_v[j],valore);
}
E
void Vettore::insert(int valore)
{
for(int j = m_numElem; j > 0; j--)
swap(m_v[j],valore);
}

Quiz 001044

Dato il seguente frammento di codice:


int k,j;
const int NR = ..., NC = ...;
float mat[NR][NC],*p = &mat[0][0];

quale delle seguenti espressioni permette di accedere all'elemento mat[k][j]?
Ap[k * NC + j]
Bp[k * NR + j]
Cp[k + j * NC]
Dp[k + j * NR]
Ep[k * NC + j * NR]

Quiz 001045

Dato il seguente frammento di codice:

template <typename T> inline void swap(T &a, T &b) { T t = a; a = b; b = t; }
...
char s1[] = "ABCDE", s2[] = "12345";
char *p1 = s1, *p2 = s2;
swap(p1,p2);
printf("%s,%s",p1,s2);

cosa viene visualizzato?
A12345,12345
B12345,ABCDE
CABCDE,12345
DABCDE,ABCDE
EABCDE,54321

Quiz 001061

Si consideri il seguente frammento di codice C++:

class Figura { ... static float perimetroCerchio(const Figura &f) { return 2 * 3.14 * f.pr.raggio; } ... };
All'interno di un metodo non statico della classe Figura, quale delle seguenti invocazioni è corretta?
AperimetroCerchio(*this)
BperimetroCerchio(this)
CperimetroCerchio()
DperimetroCerchio(&this)
Enon è possibile invocare perimetroCerchio

Quiz 001062

Dato il seguente frammento di codice C++:

class Studente : public Persona
{
...
void fun1(...)
{ ... }
...
};

quale delle seguenti affermazioni è falsa?
AIl metodo fun1 non può accedere ai membri protetti della classe Persona
BIl metodo fun1 non può accedere ai membri privati della classe Persona
CIl metodo fun1 può accedere ai membri pubblici della classe Persona
DIl metodo fun1 può accedere ai membri protetti della classe Studente
EIl metodo fun1 può accedere ai membri privati della classe Studente

Quiz 001064

In C++, se B is-like A, la classe B eredita dalla classe A
Al'implementazione
Bl'interfaccia
Ci soli attributi pubblici
Di soli attributi protetti
Ei soli attributi privati

Quiz 001066

Quale tra le seguenti funzioni membro speciali non viene mai invocata implicitamente dal compilatore?
Aoperatore delete
Boperatore di cast
Ccostruttore di default
Dcostruttore per copia
Edistruttore

Quiz 001072

Dato il seguente frammento di codice:
 

int k;
Lista<int> lista; Lista<int>::Iterator p; ... for(k = 0, p = lista.Begin(); k < 5 && p != lista.End(); k++, p++) printf("%d",*p);
quanti e quali valori vengono visualizzati?
AAl massimo 5 valori, i primi della lista
BAl massimo 5 valori, gli ultimi della lista
CEsattamente 5 valori, i primi della lista
DEsattamente 5 valori, gli ultimi della lista
EAl minimo 5 valori, i primi della lista

Quiz 001073

Relativamente ad un albero di ricerca binario, quale delle seguenti affermazioni è vera?
ATutti i valori contenuti nei nodi del sottoalbero sinistro di un qualsiasi nodo X sono minori del valore contenuto nel nodo X
BTutti i valori contenuti nei nodi del sottoalbero sinistro di un qualsiasi nodo X sono minori o uguali al valore contenuto nel nodo X
CTutti i valori contenuti nei nodi del sottoalbero sinistro di un qualsiasi nodo X sono maggiori del valore contenuto nel nodo X
DTutti i valori contenuti nei nodi del sottoalbero destro di un qualsiasi nodo X sono minori del valore contenuto nel nodo X
ETutti i valori contenuti nei nodi del sottoalbero destro di un qualsiasi nodo X sono minori o uguali al valore contenuto nel nodo X

Quiz 001077

Dato il seguente frammento di codice:

template <class T> class CMatrix
{ public: inline CMatrix(int rows,int columns)
: m_rows(0), m_columns(0), m_pBase(NULL) { set(rows,columns); }
   inline ~CMatrix()
{ reset(); }
... eventuale definizione dell'operatore di assegnamento ...   private:
void set(int rows,int columns)
{
// ... controlli sugli argomenti passati reset();
m_rows = rows;
m_columns = columns; m_pBase = new T [m_rows * m_columns]; }
void reset()
{
m_rows = 0; m_columns = 0; delete [] m_pBase; m_pBase = NULL; }
   int m_rows; // Numero di righe della matrice
int m_columns; // Numero di colonne della matrice
   T *m_pBase; // Indirizzo del primo elemento della matrice
};
come deve essere realizzato l'operatore di assegnamento di CMatrix?
A
CMatrix &operator =(const CMatrix &from)
  {
if(&from == this) return *this;

set(from.m_rows,from.m_columns);
for (int k = 0; k < m_rows * m_columns; k++)
m_pBase[k] = from.m_pBase[k];
return *this;
  }
B
CMatrix &operator =(const CMatrix &from)
  {
if(&from == this) return *this;
set(from.m_rows,from.m_columns);
return *this;
  }
C
CMatrix &operator =(const CMatrix &from)
  {
if(&from != this) reset();
m_rows = from.m_rows;
m_columns = from.m_columns; m_pBase = from.m_pBase; return *this;
  }
D
CMatrix &operator =(const CMatrix &from)
  {
m_rows = from.m_rows;
m_columns = from.m_columns; for (int k = 0; k < m_rows * m_columns; k++)
m_pBase[k] = from.m_pBase[k];
return *this;
  }
EIn questo caso, non è necessario definire l'operatore di assegnamento

Quiz 001092

Dato il seguente frammento di programma:

const char s1[] = "\"abc\"\n";

quanto vale sizeof(*s1)?
A1
B4
C5
D6
E7

Quiz 001093

Dato il frammento di codice:


struct Punto
{

int m_x;
int m_y;
};
...

   {
   Punto *pPto = new Punto;
   ...
}

nell'ipotesi che sizeof(int) == 4 e sizeof(int *) == 4, al momento dell'esecuzione vengono allocati:

A4 byte nello stack per la variabile pPto e 8 byte nell'heap per il dato puntato da pPto
B4 byte nello stack per la variabile pPto e 4 byte nell'heap per il dato puntato da pPto
C4 byte nello stack per la variabile pPto e 8 byte nel segmento dati per il dato puntato da pPto
D4 byte nel segmento dati per la variabile pPto e 8 byte nell'heap per il dato puntato da pPto
E4 byte nel segmento dati per la variabile pPto e 8 byte nello stack per il dato puntato da pPto

Quiz 001095

Dato il seguente frammento di codice:

int bx[] = { 6,5,4,3,2,1 },*b = &bx[3];

qual è il risultato dell'espressione:

b[-3] / static_cast<double>(b[-1])
A1.5
B1
C6.4
Dl'espressione è sintatticamente errata
Egli indici sono errati

Quiz 001096

Dato il seguente frammento di codice:

class C1
{ ...
public:


virtual int fun1(double x,double y = 0.0);
... };
...
C1 *pC = new C1(...);

quale delle seguenti invocazioni è corretta:
ApC->fun1(0);
BpC.fun1(0.0);
CpC->fun1();
DC1::fun1(0.0);
Enessuna delle invocazioni elencate è corretta

Quiz 001103

Quale delle seguenti affermazioni è falsa?
ASe in una classe non è stato definito un distruttore, il compilatore segnala errore
BIl compito principale del distruttore è quello di rilasciare risorse
CIl distruttore non ha tipo di ritorno
DIl distruttore non può essere sovraccaricato
EIl distruttore non può avere argomenti

Quiz 001108

Dato il seguente frammento di codice:

class A { public: virtual void Fun1() { ... } virtual void Fun2() { ... } void Fun3() { ... } ... }; class B : public A { public: virtual void Fun1() { ... } static void Fun4() { ... } }; ... { A a,*pA; B b,*pB; ... invocazione }
per quale delle seguenti invocazioni il compilatore NON è in grado di effettuare un collegamento statico?
ApB->Fun1();
Ba.Fun1();
Cb.Fun2();
DpB->Fun3();
EB::Fun4();

Quiz 001109

Dato il seguente frammento di codice:

class A { public: virtual ~A() { puts("Distruttore di A"); Fun(); } virtual void Fun() { puts("Fun di A"); } }; class B : public A { public: virtual ~B() { puts("Distruttore di B"); Fun(); } virtual void Fun() { puts("Fun di B"); } }; ... { B b1; ... }
cosa viene visualizzato?
A
Distruttore di B
Fun di B
Distruttore di A
Fun di A
B
Fun di B
Distruttore di B
Fun di B
Distruttore di A
C
Distruttore di B
Fun di B
Distruttore di A
Fun di B
D
Distruttore di A
Fun di A
Distruttore di B
Fun di B
Enon viene visualizzato nulla

Quiz 001110

Dato il seguente frammento di codice:

class A
{ public: A()
{ puts("Costruttore di A"); }
   virtual ~A()
{ puts("Distruttore di A"); }
virtual void Fun()
{ puts("Fun di A"); }
};

class B : public A
{ public: B()
{ puts("Costruttore di B"); }
   virtual ~B()
{ puts("Distruttore di B"); }
virtual void Fun()
{ puts("Fun di B"); }
};
...
{
B b;
b.Fun();
}

cosa viene visualizzato?
A
Costruttore di A
Costruttore di B
Fun di B
Distruttore di B
Distruttore di A
B
Costruttore di B
Fun di B
Distruttore di B
C
Costruttore di B
Costruttore di A
Fun di B
Distruttore di A
Distruttore di B
D
Costruttore di A
Costruttore di B
Fun di B
Distruttore di A
Distruttore di B
E
Costruttore di A
Fun di B
Distruttore di A

Quiz 001126

Dato il seguente frammento di codice:
 

int k;
Lista<int> lista; lista.AddHead(10); lista.AddHead(20); lista.AddHead(30); lista.AddHead(40); Lista<int>::Iterator p; for(k = 3, p = lista.Begin(); k > 0 && p != lista.End(); k--, p++) printf("%d ",*p);
cosa viene visualizzato?
A40 30 20
B40 30 20 10
C30 20 10
D10 20 30
E20 30 40

Quiz 001128

Nella seguente dichiarazione della classe generica Stack:


template <class T,MaxElem = 200> class Stack { public: Stack() { nelem = 0; } void push(const T &newElem) { if(isFull()) throw "Stack pieno"; elem[nelem++] = newElem; } T pop() { if(isEmpty()) throw "Stack vuoto"; return elem[--nelem]; } bool isEmpty() const { return nelem == 0; } bool isFull() const { return nelem > MaxElem; } private: int nelem; T elem[MaxElem]; };

quale metodo contiene un'istruzione errata dal punto di vista logico?
AisFull
Bpush
Cil costruttore Stack()
DisEmpty
Epop

Quiz 001129

Quale delle seguenti affermazioni è vera?
AIn una gerarchia di classi C++, le funzioni membro virtuali non devono necessariamente essere dichiarate pure nella classe base
BIn una classe C++, non è possibile dichiarare sia funzioni membro virtuali, sia funzioni membro non virtuali
CIn una classe C++, è possibile dichiarare funzioni membro statiche virtuali
DIn una classe C++, non è possibile dichiarare funzioni membro statiche non virtuali
EIn una classe C++, non è possibile dichiarare sia funzioni membro statiche, sia funzioni membro non statiche

Quiz 001201

La dichiarazione C++:

enum Colore { rosso, blu, giallo };
Anon riserva spazio di memoria
Bdefinisce 3 nuovi tipi di dati
Criserva spazio di memoria nel segmento codice
Driserva spazio di memoria nello stack
Eriserva spazio di memoria nell'heap

Quiz 001204

Data la seguente definizione:

static const char * const nome[] = {"",
   "Gennaio","Febbraio","Marzo",
   "Aprile","Maggio","Giugno",
   "Luglio","Agosto","Settembre",
   "Ottobre","Novembre","Dicembre"};

in quale area viene allocato l'array nome?
Anel segmento dati
Bnello stack
Cnell'heap
Dnel segmento codice
Eparte nel segmento dati e parte nell'heap

Quiz 001214

Date le definizioni:


int a[] = { 1, 2, 3, 4, 5 };
int *p1 = new int [10];
const int *p2;

quale delle seguenti istruzioni genera un errore in fase di compilazione?

Ap2[1] = p1[1];
Bp1[1] = p2[1];
Cp1 = a;
Dp2 = p1;
Ep2 = a;

Quiz 001216

Date le definizioni:


inline int fun1(int &a)
{ return a + 2; }
inline int fun1(int *a)
{ return *a + 1; }

quale dei seguenti frammenti di codice NON assegna a x il valore 5?

A
int x = 1,&y = x,*z = &y;
x = fun1(&x) + fun1(z);
B
int x = 0,&y = x,*z = &y;
x = 1 + fun1(x) + fun1(y);
C
int x = 1,&y = x,*z = &x;
x += fun1(&x) + fun1(z);
D
int x = 1,&y = x,*z = &y;
x = fun1(x) + fun1(&y);
E
int x = 1,&y = x,*z = &x;
x = fun1(&x) + fun1(y);

Quiz 001223

L'assemblatore permette di:
Atradurre file sorgenti assembler
Bmodificare file sorgenti assembler
Ccollegare file sorgenti assembler
Deffettuare il monitoraggio di file sorgenti assembler
Eeseguire file sorgenti assembler

Quiz 001226

Quale delle seguenti è la definizione di un puntatore a funzione:
Aint *(*pFun)();
Bint *pFun();
Cint **pFun();
Dint (**pFun)();
Evoid *pFun(int x = 0);

Quiz 001227

Dato il seguente frammento di codice:

int bx[] = { 7,6,5,4,3,2,1 },*b = &bx[3];

quale delle seguenti espressioni NON fornisce come risultato 2?
Ab[-2] / b[2]
Bb[2] / b[3]
Cb[0] / b[2]
Db[2]
Eb[-3] / b[1]

Quiz 001229

L'espressione:


   a || b


è esattamente equivalente all'espressione:

Aa ? 1 : !!b
Ba ? !!b : 1
Ca ? 1 : b
Da ? b : 1
Ea ? 1 : !b

Quiz 001233

Dato il seguente frammento di codice:

char x[] = "123456",y[] = "12345678";
bool test(const char *p1,const char *p2) { while (*p2) if(*p1++ != *p2++) return false; return true; }

Quale delle seguenti invocazioni è errata dal punto di vista logico:
Atest(x,y);
Btest(y,"1");
Ctest(y,x);
Dtest(x,"1");
Etest("12","1");

Quiz 001235

Date le definizioni:


char a[] = { '1', '2', '3', '4', '5' };
char *s1 = new char [10];
const char *s2;

quale delle seguenti istruzioni genera un errore in fase di compilazione?

As2[1] = s1[1];
Bs1[1] = s2[1];
Cs1 = a;
Ds2 = s1;
Es2 = a;

Quiz 001236

Date le definizioni:


char a[] = { '1', '2', '3', '4', '5' };
char *s1 = new char [10];
const char *s2 = a;

quale dei seguenti frammenti di codice genera un errore in fase di esecuzione?

As1 = const_cast<char *>(s2);
delete s1; s1 = NULL;
Bdelete s1;
s1 = const_cast<char *>(s2);
Cdelete s1;
s1 = a;
Ds2 = s1; s1 = NULL;
delete s2; s2 = NULL;
Es2 = s1;
delete s1; s1 = s2 = NULL;