Projet

Général

Profil

Paramètres par défaut dans les constructeurs

Si certains objets ont plusieurs constructeurs, appelés avec des paramètres différents, on peut aussi dans le prototype du constructeur (dans le .h) initialiser les valeurs des paramètres.
Ainsi on peut appeler un même constructeur avec un nombre de paramètres différents.
Quand, dans le code de leterrier-calculmental, je veux proposer des additions, je crée un exercice
exercice* monExo1 = new exercice("addition");

Mais quand je veux proposer des compléments additifs à 10, je crée mon exercice avec
exercice* monExo1 = new exercice("complementA",10);

En fait voici le constructeur :
exercice(QString, int val=0, QString niveau=0,QWidget *parent = 0);

Je dois donc donner une chaine de caractère (le nom de l'exercice) obligatoirement, mais je donne ou pas selon ce que je veux faire un entier, une autre chaine de caractère pour le niveau ou un parent.
Attention toutefois à deux choses :
  1. Ordre des paramètres dans le constructeur : les paramètres initialisés doivent obligatoirement (sinon pas de compilation) être dans le prototype après les paramètres non initialisés. Exemple de prototype rejeté à la compilation :
    exercice(QString, int val=0, QString niveau,QWidget *parent = 0);
    

    pour initialiser la valeur mais pas le niveau, il faudrait écrire :
    exercice(QString, QString niveau, int val=0, QWidget *parent = 0);
    

    Tout le monde a bien compris qu'alors on ne pourrait pas alors appeler un exercice sans préciser dans l'appel le niveau ?
  2. Passage de paramètres initialisés : les paramètres ont une valeur par défaut mais on peut en donner une de façon explicite; attention toutefois, on ne peut passer une valeur à un paramètre initialisé que si on en a passé une à tous les paramètres qui précèdent. Avec mon constructeur, les appels suivants seront donc à la compilation :
    Accepté
    exercice* monExo1 = new exercice("addition");
    

    Accepté
    exercice* monExo1 = new exercice("complementA",10);
    

    Accepté
    exercice* monExo1 = new exercice("addition",10,"Niveau2");
    

    Accepté (rappel : dans une classe, "this" représente l'objet instancié)
    exercice* monExo1 = new exercice("addition",10,"Niveau2", this);
    

    Rejeté
    exercice* monExo1 = new exercice("addition",this);
    

    Rejeté ("" est une valeur pour la QString niveau, vide ≠ nul pour les QString)
    exercice* monExo1 = new exercice("addition","");
    
Redmine Appliance - Powered by TurnKey Linux