Il faut garder a l’esprit qu’un choix pedagogique n’a pas forcement besoin de suivre les bonnes pratiques de codage, mais doit repondre a un objectif pedagogique.
Un premier objectif est d’expliquer que les objets peuvent etre defaut constructible et defaut copiable. A priori, pour cela, les 2 syntaxes peuvent permettre d’expliquer cela au lecteur.
Un second point peut a transmettre est que les objets ne sont pas magiquement defaut constructible et defaut copiable. Meme quand il n’y a rien d’ecrire, la construction et la copie passent par des constructeur et operateur, meme si on ne les vois pas.
Pour cet objectif, je trouve que l’approche avec "default" est plus claire.
J’ajouterais qu’il n’est pas necessaire d’apprendre au lecteur a etre faigeant, il sait generalement faire cela tout seul Pas besoin de montrer la version sans "default" en premier, il apprendra a l’utiliser de toute facon. ("parler en premier des choses les plus importante")
Et de toute facon, j’ai de plus en plus tendance a penser que tout ce qui est implicite est un gros probleme pour l’apprentissage, voire le code de tous les jours. Donc j’aurais tendance a preferer aussi "default".
A mon avis, un demarche pour parler de tout cela, c’est de partir du plus explicite au moins explicte :
- classe avec declaration explicite et definition explicite. On montre la syntaxe pour declarer un constructeur par defaut et les operations de copie. Et on parle du big 5
- classe avec declaration explicite et definition implicite. On ajoute le fait que le compilateur peut faire une partie du boulot a notre place. (Parler de "default" dans le .h ET le .cpp).
- classe avec declaration implicite et definition implicite. Parler des limitation (quand l’implicite n’est pas automatique ?). Parler du big-0.