si bien sur, ça permet par exemple de s'assurer qu'on passe par l'interface pour attaquer la classe, très important en cas de NVI ou l'interface fait des vérifications de pre/post conditions.
On peut mais c'est un mauvaise pratique de changer l'accessibilité d'une fonction
Dans le pattern NVI, il faut une fonction virtuelle privé + fonction non virtuelle publique dans le parent et on surcharge que la fonction virtuelle privée en la conservant privée
En particulier parce que le private ne sera pas respecté dans ce cas et le code affiche "B"
T'as bien raison epso , tu prend la main ? Et oui ce une fonction virtuel et en plus la fonction g() prend une reference d'un objet A si s'a aurais pas du etre le cas sa afficherai "A"
Je suis juste un débutant expérimenté. RTFM | RTFD
une question que j'ai proposé sur cppquiz, en attendant qu'elle soit validé, qu'affiche ceci ? Attention il faut expliquer, pas juste une réponse à la va vite car c'est sioux…
#include <iostream>
template < typename T >
class A {};
template < typename T >
using B = A<T>;
template < template < typename > class >
void f() { std::cout << "1"; }
template <>
void f<A>() { std::cout << "2"; }
int main()
{
f<A>();
f<B>();
}
il y avait même un exemple qui abondait dans ce sens dans le draft mais il a été retiré au final du coup ! Seul les spécialisation répondent au besoin d'équivalence des types. un pur alias template introduit en réalité un tout nouveau type !
Je ne trouve pas cela illogique, si une template sur B équivaux à une template sur A pour l'exemple, alors que représente B si il est égal à typename remove_reference<T>::type ou int ?
Pour moi l'alias ce trouve sur le B spécifié, par sur la template B.
Un énorme UP : J'ai un peu été tard je crois . Mais l'atelier est désormais ré-ouvert ! Euh ... du coup je prend la main ou ... Parce que jusqu’à la je vous ai pas suivis parce que tout simplement je comprenais que DALLE ! A propos de ça , je vais aller manger
Je suis juste un débutant expérimenté. RTFM | RTFD
Bon je suis aller faire un quiz sur CppQuiz.org et bon j' "essaye" de faire de quiz de niveau meduim mais a la premiere question j'ai pointer :/ Voila la question :
#include <iostream>
using namespace std;
class A {
public:
A() { cout << "a"; }
~A() { cout << "A"; }
};
int i = 1;
int main() {
label:
A a;
if (i--)
goto label;
}
Qu'est-ce qui sort dans la console ? (ou bien ne compile pas )
Je suis juste un débutant expérimenté. RTFM | RTFD
Sans tester je dirais que ça ne compile pas puisque main est une fonction comme toutes les autres et si elle est déclarée de type int, alors elle doit renvoyer quelque chose.
En plus poser des questions de quiz avec des goto et label... C'est sale
EDIT : au temps pour moi, j'ai testé une autre question de ce quiz où le main ne possédait pas de return et mon compilo ne m'a pas engueulé... Étrange !
Bon alors pour la question que tu poses je dirais que la réponse est aAaA
Au début je pensais que ce serait aaAA mais si l'on déclare une variable du même nom qu'une variable existante, l'ancienne est détruite pour laisser place à la nouvelle. Donc aAaA.
- Edité par eldoir 22 août 2014 à 12:59:14
Heureux l'étudiant qui, comme la paisible rivière, suit toujours son cours sans jamais quitter son lit.
Sans tester je dirais que ça ne compile pas puisque main est une fonction comme toutes les autres et si elle est déclarée de type int, alors elle doit renvoyer quelque chose.
The body of the main function does not need to contain the return statement: if control reaches the end of main without encountering a return statement, the effect is that of executing return0; -> ici (Par contre je crois que c'est valable qu'a partir d'une certaine norme).
Mohack a écrit:
Bon je suis aller faire un quiz sur CppQuiz.org et bon j' "essaye" de faire de quiz de niveau meduim mais a la premiere question j'ai pointer :/ Voila la question :
Je ne comprends pas bien, tu préfaire poser la question que de compiler? ou tu as compilé et tu ne comprends toujours pas le résultat?
goto permet de faire un saut n'importe où dans une fonction. et
"If transfer of control exits the scope of any automatic variables (e.g. by jumping backwards to a point before the declarations of such variables or by jumping forward out of a compound statement where the variables are scoped), the destructors are called for all variables whose scope was exited, in the order opposite to the order of their construction." ici.
i est égale à 1, et t'as comme condition if(i--), donc tant que i est différent de 0, ce n'est le cas qu'une seul fois, donc qu'un seul goto donc deux constructions de A (et une constructions implique obligatoirement une destruction) d'où le aAaA.
Je suis juste un débutant expérimenté. RTFM | RTFD
Discord NaN. Mon site.
Je suis juste un débutant expérimenté. RTFM | RTFD
Discord NaN. Mon site.
Discord NaN. Mon site.
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
Discord NaN. Mon site.
Je suis juste un débutant expérimenté. RTFM | RTFD
Je suis juste un débutant expérimenté. RTFM | RTFD
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C