Messages de gatias

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 :rire:
La composition :ok:

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

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 :rire:
La composition :ok:

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

https://en.wikipedia.org/wiki/Composition_over_inheritance :ok:

Et donc ?

Le 30 mai 2021 à 23:28:39 :
L'héritage :rire:
La composition :ok:

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 ?

Bah c'est bien, je ne vois pas le soucis :question:
Mp pour le discord
Mp