Barème indicatif: 12 points
Etant donnée la classe "séquence bornée" suivante:
Cette classe implémente par un tableau une séquence d'au plus
size éléments. Vous allez écrire en vous appuyant sur cette classe les
classes boundedStack et boundedQueue, qui
implémentent les séquences bornées munies d'une discipline d'accès de
pile (LIFO) et d'une discipline d'accès de file (FIFO)
respectivement. Vous testerez les préconditions, par exemple avec des
asserts.
#define PURE_VIRTUAL (0)
class boundedSequence {
public:
boundedSequence(unsigned size); // A sequence of at most size elements
~boundedSequence();
virtual void put(int) = PURE_VIRTUAL; // Precondition: !full()
virtual bool full() const = PURE_VIRTUAL;
virtual bool empty() const = PURE_VIRTUAL;
virtual int get() = PURE_VIRTUAL; // Precondition: !empty()
protected:
void display(unsigned from, unsigned to); // Precondition: from <= to && to < _size
protected:
int *_data;
unsigned _size;
};
boundedSequence::boundedSequence(unsigned size)
{
_data = new int[size];
_size = size;
}
boundedSequence::~boundedSequence()
{
delete [] _data;
}
boundedStack s(10);
boundedQueue q(10);
boundedSequence *set[2];
set[0] = &s;
set[1] = &q;
Note: dans une file de longueur 3, on doit pouvoir stocker deux
éléments, puis en retirer un et en stocker deux de plus...
cout << "Les elements qui sortiront de la file sont: " << q << " et de la pile: " << s << endl;
NB: Vous ne devez pas modifier la classe boundedSequence, ce qui est de toute façon inutile.
Barème indicatif: 5 points
Dans le code suivant indiquez quelle est la sortie du programme en
justifiant d'une ou deux phrases à chaque fois.
#include <iostream.h>
struct c {
int i;
c(int) { i = 5; }
c(float) { cout << 17 << ' '; }
~c() { cout << 43 << ' '; }
void operator=(int) { i = 7; }
int m() { return 11; }
};
struct d: public c {
d(): c('a') { }
d(int): c(1.0f) { cout << 19 << ' '; }
~d() { cout << 41 << ' '; }
int m() { return 13; }
int n() const { return 31; }
int n() { return 37; }
};
ostream &operator<<(ostream &s, const d&)
{
s << 23 << ' ';
}
main()
{
c x(1);
cout << "a: " << x.i << endl;
c y = 2;
cout << "b: " << y.i << endl;
d z;
c &r = z;
cout << "c: " << r.m() << endl;
cout << "d: " << d(1) << endl;
cout << "e: " << z.n() << endl;
}
Barème indicatif: 3 points
Indiquez pour chacune des lignes suivantes quelles sont celles qui sont correctes:
1. char *p; |