Topic de Uraldium228 :

QUESTION a un PRO en C++

J'arrive pas à comprendre les classes abstraites en cpp, j'ai plusieurs classes qui héritent d'une classe que je n'ai pas besoin d'instancier, j'ai besoin d'une fonction de même signature mais d'implémentation différente pour toutes les classes (struct dans mon cas) héritées
Qu'est-ce que tu comprends pas ? Une classe abstraite ça permet de factoriser des comportements communs utilisant des propriétés particulières.
#include <bits/stdc++.h>
 
using namespace std;

struct A {
  virtual void print();
};

struct B : public A {
   void print() override {
    cout << "OK\n";
  }
};

struct C: public A {
  void print() override {
    cout << "OKK\n";
  }
};
 
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  C test;
  test.print();
 
  return 0;
}

Tu ne comprends pas quoi ?

Le 30 mai 2021 à 23:00:15 galoiseries2 a écrit :
Qu'est-ce que tu comprends pas ? Une classe abstraite ça permet de factoriser des comportements communs utilisant des propriétés particulières.

je sais ce que c'est, je ne sais pas comment les faire en c++
en fait j'ai cru comprendre qu'iul fallait utiliser le mot clef virtual mais que sur les attributs et les fonctions. J'ai fait que les classes abstraites en Java/C#

Le 30 mai 2021 à 23:01:43 :

Le 30 mai 2021 à 23:00:15 galoiseries2 a écrit :
Qu'est-ce que tu comprends pas ? Une classe abstraite ça permet de factoriser des comportements communs utilisant des propriétés particulières.

je sais ce que c'est, je ne sais pas comment les faire en c++
en fait j'ai cru comprendre qu'iul fallait utiliser le mot clef virtual mais que sur les attributs et les fonctions. J'ai fait que les classes abstraites en Java/C#

bah tu cherches la syntaxe sur google comme un grand non ?

Le 30 mai 2021 à 23:01:13 gatias a écrit :
<code>#include <bits/stdc++.h>

using namespace std;

struct A {
virtual void print();
};

struct B : public A {
void print() override {
cout << "OK\n";
}
};

struct C: public A {
void print() override {
cout << "OKK\n";
}
};

int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
C test;
test.print();

return 0;
}</code>

Tu ne comprends pas quoi ?

Merci, en fait je suis embrouillé par virtual, quel est l'interet de mettre virtual sur chacun des attributs plutôt que de spécifier la classe comme étant abstraite ?
putain ce que c'est laid le c++

Le 30 mai 2021 à 23:01:43 :

Le 30 mai 2021 à 23:00:15 galoiseries2 a écrit :
Qu'est-ce que tu comprends pas ? Une classe abstraite ça permet de factoriser des comportements communs utilisant des propriétés particulières.

je sais ce que c'est, je ne sais pas comment les faire en c++
en fait j'ai cru comprendre qu'iul fallait utiliser le mot clef virtual mais que sur les attributs et les fonctions. J'ai fait que les classes abstraites en Java/C#

virtual void Test() = 0; dans la classe mère bg

Le 30 mai 2021 à 23:03:50 mov_eax_0 a écrit :

Le 30 mai 2021 à 23:01:43 :

Le 30 mai 2021 à 23:00:15 galoiseries2 a écrit :
Qu'est-ce que tu comprends pas ? Une classe abstraite ça permet de factoriser des comportements communs utilisant des propriétés particulières.

je sais ce que c'est, je ne sais pas comment les faire en c++
en fait j'ai cru comprendre qu'iul fallait utiliser le mot clef virtual mais que sur les attributs et les fonctions. J'ai fait que les classes abstraites en Java/C#

bah tu cherches la syntaxe sur google comme un grand non ?

j'y peux rien si la syntaxe du c++ est pas claire, ce qu'on appelle classe abstraite en c++ j'ai l'impression que c'est une classe dont certains des attributs sont virtuels

Le 30 mai 2021 à 23:05:12 Volta75 a écrit :

Le 30 mai 2021 à 23:01:43 :

Le 30 mai 2021 à 23:00:15 galoiseries2 a écrit :
Qu'est-ce que tu comprends pas ? Une classe abstraite ça permet de factoriser des comportements communs utilisant des propriétés particulières.

je sais ce que c'est, je ne sais pas comment les faire en c++
en fait j'ai cru comprendre qu'iul fallait utiliser le mot clef virtual mais que sur les attributs et les fonctions. J'ai fait que les classes abstraites en Java/C#

virtual void Test() = 0; dans la classe mère bg

ça j'avais compris mais j'arrive pas à comprendre la cohérence du langage, genre on peut faire une classe semi abstraite avec certains objets abstraits ?

Le 30 mai 2021 à 23:04:12 :

Le 30 mai 2021 à 23:01:13 gatias a écrit :
<code>#include <bits/stdc++.h>

using namespace std;

struct A {
virtual void print();
};

struct B : public A {
void print() override {
cout << "OK\n";
}
};

struct C: public A {
void print() override {
cout << "OKK\n";
}
};

int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
C test;
test.print();

return 0;
}</code>

Tu ne comprends pas quoi ?

Merci, en fait je suis embrouillé par virtual, quel est l'interet de mettre virtual sur chacun des attributs plutôt que de spécifier la classe comme étant abstraite ?
putain ce que c'est laid le c++

Tu peux avoir des méthodes qui ne sont pas abstraites donc il faut spécifier quelle méthode va l'être, c'est comme ça.
Je ne vois pas en quoi le C++ est moche, quand on ne comprend rien ça peut faire peur mais il n'y a rien de moche.

Le 30 mai 2021 à 23:07:13 :

Le 30 mai 2021 à 23:05:12 Volta75 a écrit :

Le 30 mai 2021 à 23:01:43 :

Le 30 mai 2021 à 23:00:15 galoiseries2 a écrit :
Qu'est-ce que tu comprends pas ? Une classe abstraite ça permet de factoriser des comportements communs utilisant des propriétés particulières.

je sais ce que c'est, je ne sais pas comment les faire en c++
en fait j'ai cru comprendre qu'iul fallait utiliser le mot clef virtual mais que sur les attributs et les fonctions. J'ai fait que les classes abstraites en Java/C#

virtual void Test() = 0; dans la classe mère bg

ça j'avais compris mais j'arrive pas à comprendre la cohérence du langage, genre on peut faire une classe semi abstraite avec certains objets abstraits ?

https://www.learncpp.com/cpp-tutorial/pointers-and-references-to-the-base-class-of-derived-objects/

Le 30 mai 2021 à 23:08:20 gatias a écrit :

Le 30 mai 2021 à 23:04:12 :

Le 30 mai 2021 à 23:01:13 gatias a écrit :
<code>#include <bits/stdc++.h>

using namespace std;

struct A {
virtual void print();
};

struct B : public A {
void print() override {
cout << "OK\n";
}
};

struct C: public A {
void print() override {
cout << "OKK\n";
}
};

int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
C test;
test.print();

return 0;
}</code>

Tu ne comprends pas quoi ?

Merci, en fait je suis embrouillé par virtual, quel est l'interet de mettre virtual sur chacun des attributs plutôt que de spécifier la classe comme étant abstraite ?
putain ce que c'est laid le c++

Tu peux avoir des méthodes qui ne sont pas abstraites donc il faut spécifier quelle méthode va l'être, c'est comme ça.
Je ne vois pas en quoi le C++ est moche, quand on ne comprend rien ça peut faire peur mais il n'y a rien de moche.

Ok mais si je fais virtual ça change quoi par rapport à une fonction normale que je redéfinie plus tard ?

disons que c'est très peu verbeux par rapport à un langage genre c# et pas aussi simple que le C.
De toute façon c'est le langage le plus puissant donc osef

Le 30 mai 2021 à 23:07:13 :

Le 30 mai 2021 à 23:05:12 Volta75 a écrit :

Le 30 mai 2021 à 23:01:43 :

Le 30 mai 2021 à 23:00:15 galoiseries2 a écrit :
Qu'est-ce que tu comprends pas ? Une classe abstraite ça permet de factoriser des comportements communs utilisant des propriétés particulières.

je sais ce que c'est, je ne sais pas comment les faire en c++
en fait j'ai cru comprendre qu'iul fallait utiliser le mot clef virtual mais que sur les attributs et les fonctions. J'ai fait que les classes abstraites en Java/C#

virtual void Test() = 0; dans la classe mère bg

ça j'avais compris mais j'arrive pas à comprendre la cohérence du langage, genre on peut faire une classe semi abstraite avec certains objets abstraits ?

Le C++ est le langage le plus puissant et complet existant. Pour répondre à ta question, si une classe possède au moins 1 méthode virtuelle pure (=0) alors elle est considérée abstraite, et on ne peut pas instancier d'objet de classe abstraite.
Si l'on souhaite hériter de cette classe, alors il faut redéfinir toutes les méthodes virtuelles pures se trouvant dans la classe mère, sinon la classe enfant est elle aussi considérée comme abstraite.

Bientôt 3 ans que j'étudie le C++ avec le Primer, j'en suis toujours pas à ce chapitre https://image.noelshack.com/fichiers/2021/18/7/1620572127-jesus-barbe-serein.png

Cet été je termine d'apprendre ce langage du démon https://image.noelshack.com/fichiers/2016/26/1467335935-jesus1.png

Le 30 mai 2021 à 23:12:18 :
Bientôt 3 ans que j'étudie le C++ avec le Primer, j'en suis toujours pas à ce chapitre https://image.noelshack.com/fichiers/2021/18/7/1620572127-jesus-barbe-serein.png

Cet été je termine d'apprendre ce langage du démon https://image.noelshack.com/fichiers/2016/26/1467335935-jesus1.png

J'ai créé un cours complet de C++ Moderne (C++11 au C++20), si tu es intéressé mp moi je pourrais peut etre t'aider tu m'as l'air assez motivé

Le 30 mai 2021 à 23:13:26 :

Le 30 mai 2021 à 23:12:18 :
Bientôt 3 ans que j'étudie le C++ avec le Primer, j'en suis toujours pas à ce chapitre https://image.noelshack.com/fichiers/2021/18/7/1620572127-jesus-barbe-serein.png

Cet été je termine d'apprendre ce langage du démon https://image.noelshack.com/fichiers/2016/26/1467335935-jesus1.png

J'ai créé un cours complet de C++ Moderne (C++11 au C++20), si tu es intéressé mp moi je pourrais peut etre t'aider tu m'as l'air assez motivé

Ce serait parfait s'il te plaît ! Mon livre aborde simplement le C++11 et ce serait super bien pour compléter mon apprentissage !

Le 30 mai 2021 à 23:11:28 Volta75 a écrit :

Le 30 mai 2021 à 23:07:13 :

Le 30 mai 2021 à 23:05:12 Volta75 a écrit :

Le 30 mai 2021 à 23:01:43 :

Le 30 mai 2021 à 23:00:15 galoiseries2 a écrit :
Qu'est-ce que tu comprends pas ? Une classe abstraite ça permet de factoriser des comportements communs utilisant des propriétés particulières.

je sais ce que c'est, je ne sais pas comment les faire en c++
en fait j'ai cru comprendre qu'iul fallait utiliser le mot clef virtual mais que sur les attributs et les fonctions. J'ai fait que les classes abstraites en Java/C#

virtual void Test() = 0; dans la classe mère bg

ça j'avais compris mais j'arrive pas à comprendre la cohérence du langage, genre on peut faire une classe semi abstraite avec certains objets abstraits ?

Le C++ est le langage le plus puissant et complet existant. Pour répondre à ta question, si une classe possède au moins 1 méthode virtuelle pure (=0) alors elle est considérée abstraite, et on ne peut pas instancier d'objet de classe abstraite.
Si l'on souhaite hériter de cette classe, alors il faut redéfinir toutes les méthodes virtuelles pures se trouvant dans la classe mère, sinon la classe enfant est elle aussi considérée comme abstraite.

Je comprends mieux merci, faut que j'essaie de comprendre la signification d'un point de vue compilation de '=0'

Le 30 mai 2021 à 23:13:26 Volta75 a écrit :

Le 30 mai 2021 à 23:12:18 :
Bientôt 3 ans que j'étudie le C++ avec le Primer, j'en suis toujours pas à ce chapitre https://image.noelshack.com/fichiers/2021/18/7/1620572127-jesus-barbe-serein.png

Cet été je termine d'apprendre ce langage du démon https://image.noelshack.com/fichiers/2016/26/1467335935-jesus1.png

J'ai créé un cours complet de C++ Moderne (C++11 au C++20), si tu es intéressé mp moi je pourrais peut etre t'aider tu m'as l'air assez motivé

moi ça m'intéresse, je suis en L3 et je vais peut être aller en Master système embarqués et le C++ est un requis indispensable

Je comprend rien au c++, déjà que j'ai du mal avec le c https://image.noelshack.com/fichiers/2018/04/7/1517142194-ahilunettes.png

Données du topic

Auteur
Uraldium228
Date de création
30 mai 2021 à 22:54:54
Nb. messages archivés
44
Nb. messages JVC
44
En ligne sur JvArchive 313