Le 30 mai 2021 à 23:32:58 :
Le 30 mai 2021 à 23:32:11 gatias a écrit :
Le 30 mai 2021 à 23:28:39 :
L'héritage
La compositionPour l'héritage multiple oui mais sinon non.
L'héritage permet de faciliter beaucoup de choses et d'avoir un code plus simple à lire.
Apres oui, si tu as besoin de performances, il faut bannir l'héritage et préférer les templates mais l'héritage n'est pas non plus à jeter tant que ça n'est pas utilisé n'importe comment
tu peux développer ça m'intéresse
développer quoi ?
Le 30 mai 2021 à 23:32:42 :
Le 30 mai 2021 à 23:32:11 :
Le 30 mai 2021 à 23:28:39 :
L'héritage
La compositionPour l'héritage multiple oui mais sinon non.
L'héritage permet de faciliter beaucoup de choses et d'avoir un code plus simple à lire.
Apres oui, si tu as besoin de performances, il faut bannir l'héritage et préférer les templates mais l'héritage n'est pas non plus à jeter tant que ça n'est pas utilisé n'importe comment
Et donc ?
Le 30 mai 2021 à 23:28:39 :
L'héritage
La composition
Pour l'héritage multiple oui mais sinon non.
L'héritage permet de faciliter beaucoup de choses et d'avoir un code plus simple à lire.
Apres oui, si tu as besoin de performances, il faut bannir l'héritage et préférer les templates mais l'héritage n'est pas non plus à jeter tant que ça n'est pas utilisé n'importe comment
Le 30 mai 2021 à 23:11:20 :
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
Imagine que tu as une classe parent et que tu as plusieurs sous-classes qui en hérite.
Tu aimerais les stocker dans un tableau et que chaque sous-classe implémente x méthodes d'une manière spécifique, et bien c'est ce que permettent les fonctions virtuelles.
#include <bits/stdc++.h>
using namespace std;
struct A {
virtual void print() const = 0;
};
struct B : public A {
void print() const override {
cout << "OK\n";
}
};
struct C: public A {
void print() const override {
cout << "OKK\n";
}
};
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
C test;
vector<unique_ptr<A>> v;
v.push_back(make_unique<C>());
v.push_back(make_unique<B>());
for (const auto& i: v) {
i->print();
}
return 0;
}
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: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.
#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 ?