You are on page 1of 7

Questionnaire technique

C++

C++
1. Quelles sont les principales diffrences entre lallocation statique et lallocation
dynamique ?
Statique : Prvoir lespace mmoire ncessaire avant l excution du programme
Dynamique : Alloues lors de l entre dans la routine, besoin de dallocation
2. Quelle est la syntaxe pour une allocation dynamique dun tableau de float /
destruction de ce tableau en C++ (pas en C)
Float* ftableau = new float[SIZE_DE_TABLEAU] ;
Delete[] ftableau ;
3. Quelle est la syntaxe pour une allocation statique dun tableau de float / destruction
de ce tableau
Float *tableau = float[SIZE_DE_TABLEAU] ;
4. Ecrire le code C++ pour allouer, remplir et dtruire un tableau deux dimensions
de type float de taille n contenant une matrice 2D avec le format suivant M i,j = (i+j)
Include<iostream>
Float** M = new float*[sizeX] ;
For (int i = 0 ; i < sizeX ; ++i)
{
M[i] = new float[sizeY] ;
For (int j = 0 ; j < sizeY ; j++)
M[i][j] = i+j ;
}
5. Quels sont les diffrences, avantages et inconvnients entre passage par pointeur,
passage par rfrence et passage par valeur ?

6. Quels sont les avantages et inconvnients de lhritage multiple ?


Inconvnients:
7. Quelles sont les diffrences entre Struct et Class ?
Par dfaut, tous variables dans Struct sont globaux, en revanche, les variables dans
Class sont prive
8. Lorsquune classe drive est instancie, dans quel ordre sont appels les
constructeurs ? Mme question pour les destructeurs lors que de la destruction de
linstance.

Questionnaire technique C++

9. Dcrivez les designs patterns que vous avez dj utiliss.


10. Le code suivant compile-t-il correctement ? Si oui, quaffiche le programme ?
#include <iostream>
class A
{
public:
virtual void f() { std::cout << "A::f()"; }
};
class B : public A
{
public:
void f() { std::cout << "B::f()"; }
void g(A *a) { std::cout << "B::g(A *)"; }
void g(B *b) { std::cout << "B::g(B *)"; }
};
void main()
{
A *x = new A;
A *y = new B;
B *z = new B;
x->f();
y->f();
z->g(x);
z->g(y);
}

oui, A ::f()B ::f()B ::g(A*B) ::g(A*)

Questionnaire technique C++

Algorithme
11. Expliquez ce que fait cette fonction ?
int function(int* tab, int size, int v, int a, int b)
{
if(a < 0 || b >= size)
return -1;
int c = a + (b - a) / 2;
if(tab[c] == v || a == b)
return c;
if(tab[c] > v)
return function(tab, size, v, a, c - 1);
else
return function(tab, size, v, c + 1, b);
}

a. Ecrivez un exemple d'appel de cette fonction avec les ventuelles initialisations.


using namspace std ;
int main()
{
int tab[] = {1,2,3,4,5,6} ;
int size = sizeof(tab} / sizeof(tab[0]) ;
int v = 4 ;
int a = 2 ;
int b = size 1 ;
int c = function (tab, size, v, a, b) ;
cout << c << endl ;
}

12. Pouvez-vous reprer des erreurs dans le code ? Si oui, expliquez et corrigez-les.
void tri(float*& tab, int size)
{
float tab2 = new float[size];
for(int i = 0; i <= size; i++)
{
int index(0);
for(int j = 0; j <= size; j++)
if(tab[i] > tab[j])
index++;

tab2[index] = tab[i];
}
delete tab;
tab = tab2;

Oui,
void tri(float* tab, int size)
{

Questionnaire technique C++

float *tab2 = new float[size];


for(int i = 0; i <= size; i++)
{
int index(0);
for(int j = 0; j <= size; j++)
if(tab[i] > tab[j])
index++;
tab2[index] = tab[i];
}
delete tab;
tab = tab2;
delete tab2;
}

a. Quelles sont les conditions initiales pour que ce code fonctionne ?


Le valeur de tab[]
13. Implmentez la fonction leafCount qui retourne le nombre de denfants dans
larbre pass en argument :
struct Node
{
Node *parent;
std::vector<Node*> children;
};
int leafCount(Node* root)
{
}

14. Quels sont les problmes que lon peut rencontrer avec des fonctions rcursives ?
Faut de valeur de retour, difficile de dboguer

Questionnaire technique C++

Multi taches
15. Expliquer la diffrence entre un mutex et un smaphore ?
Typiquement, Les mutex sont gnralement utiliss pour srialiser l'accs une
section de code rentrante qui ne peuvent pas tre excutes simultanment par
plus d'un fil. Un smaphore limite le nombre d'utilisateurs simultans d'une
ressource partage jusqu' un nombre maximum

16. Expliquer ce quest un inter-blocage (deadlock)


Inter-blocage est une situation dans laquelle deux ou plusieurs actions
concurrentes sont chacun attendant que lautre la fin, et donc ne fait jamais
17. Producteur / consommateur : donner vos commentaires sur le code suivant et
corriger les bugs.
const int SIZE = 10;
Semaphore freeSem(SIZE);
Semaphore usedSem(0);
Mutex lock;
MyObject* object = new MyObject;
MyObject* buffer[SIZE];
int writeIndex = 0;
int readIndex = 0;
// inserts a new produced object in the producer/consumer pipe
void produce(MyObject* object)
{
while(true)
{
freeSem.acquire();
mutex.lock();
buffer[writeIndex] = object;
writeIndex = (writeIndex + 1) % SIZE;
usedSem.release();
mutex.unlock();
}
}
// consumes the first object from the producer/consumer pipe
MyObject* consume()
{
MyObject *object;
while(true)
{
usedSem.acquire();
mutex.lock();
object = buffer[++readIndex];
freeSem.release();
mutex.unlock();
}
return object;
}

Questionnaire technique C++

Mthodologie:
18. Veuillez numrer les diffrentes phases dun projet et estimer le temps que vous
consacrez chacune dentre elles.

19. Quels sont les rgles de codages que vous vous imposez ?

20. Quels sont les outils que vous utilisez pour contribuer la qualit du rendu final de
votre projet ?

Questionnaire technique C++

QT 4
21. Expliquer brivement ce quest un signal et un slot
Cest une mcanise centrale de QT qui permet de communication entre les objets.
Un signal est mis quand un vnement particulier se produit. Une Slot est appele
quand un signal connect elle est mis.
22. Quels sont les diffrents moyens de communication entre tches fournis par QT ?
1. TCP/IP dans QtNetwork, QTcpSocket, QTcpServer
2. Partag de mmoire dans QShareMemory
3. D-BUS dans QtDBUS (sous linux)
4. QCopChannel sous Qt pour linux embarqu.
23. Quelles classes QT 4 sont utilises pour crer cette fentre ?

QWidget/QApplication
QListView
QStringList, QStringListModel
QCheckBox
QPushButton

Questionnaire technique C++

You might also like