1. Les bases
Différence entre struct et class.
Qu’est-ce que la const-conformité ?
Qu’est-ce qu’un pointeur intelligent ? Donner des exemples (boost, STL,…).
Quel est l’impact de l’utilisation d’exceptions sur les performances (au runtime) ?
2. Poo en c++
Différence entre héritage privé et public.
Qu'est-ce que la forme canonique orthodoxe de Coplien ?
Que coûte un héritage (en termes de perf au runtime) ?
Que se passe-t-il si on appelle une fonction virtuelle dans un constructeur ?
3. Templates
Que sont des classes de Trait et de Policy ?
Qu’est-ce que CRTP ?
Qu’est-ce qu’une liste de types ? A quoi ça peut servir ?
4. C++11
Qu’est-ce que la move semantic (principe, syntaxe)?
Qu’est-ce le default destructor ? Quel est l’intérêt ?
Que devient la forme canonique de Coplien en c++11 ?
Quand est-ce qu’un lambda peut-être utile ?
auto vs typedef
5. Patterns & idioms
Cheshire cat (pimpl).
NVI / clone idiom
RAII
LSP
SRP
6. Méthodologie
Que fait un « svn reverse » ?
Qu’est-ce que l’unit testing ?
Qu’est-ce que le profiling ?
Commenter le code suivant :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| template <typename ContainerType, typename FillFonctorType>
void FillContainer(ContainerType & container, size_t size)
{
ContainerType(size).swap(container);
std::for_each(container.begin(), container.end(), FillFonctorType());
}
template <typename ContainerType, typename PredicateType>
void RemoveIf(ContainerType & container, const PredicateType & predicate)
{
for (auto it = container.begin(); it != container.end();++it)
container.erase(std::remove_if(container.begin(), container.end(), predicate), container.end());
}
struct RandomIntGeneratorFonctor
{
RandomIntGeneratorFonctor(int min=-10, int max=10) : distribution(std::uniform_int_distribution<int>(min, max)) {}
int operator () () { return distribution(random_int_generator); }
void operator () (int & value ) { value = distribution(random_int_generator); }
private: std::uniform_int_distribution<int> distribution;
};
template <typename T>
struct LazyComparePredicate
{
LazyComparePredicate(const T & compared_element) : compared_element(compared_element) {}
bool operator () (const T & to_compare) { return (to_compare == compared_element); }
private: T compared_element;
};
main()
{
typedef std::vector<int> IntVector;
IntVector my_vector(10);
std::generate(my_vector.begin(), my_vector.end(), RandomIntGeneratorFonctor(0, 10));
FillContainer<IntVector, RandomIntGeneratorFonctor>(my_vector, 10);
RemoveIf<IntVector, LazyComparePredicate<int>>(my_vector, LazyComparePredicate<int>(5));
} |
Partager