Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Fabien LE LEZ
On Sun, 7 Sep 2008 04:47:25 -0700 (PDT), Korchkidu :
A a; B b; a = b; Ici, on appelle d'abord les constructeurs puis l'opérateur
On appelle A::A(), puis B::B(), puis :
- soit "A::operator= (B const&)", si elle existe
- soit un opérateur de conversion de B en A, puis l'opérateur de copie.
B b; A a = b; Ici, on appelle directement le constructeur
C'est plus tordu que ça, si A et B sont deux types différents. Cette expression est équivalente à :
A a (A (b));
En d'autres termes, deux fonctions sont appelées successivement : A::A (B const&) (ou "B::operator A()", du moins je crois) A::A (A const&)
donc: pourquoi ? Quel est l'intérêt ?
A n'a pas forcément un opérateur =.
Mais le cas le plus fréquent, c'est que A n'a pas de constructeur sans argument, et tu ne peux pas écrire "A a;".
class B {};
class A { public: A (B const&); //... };
B b; A a1 (b); // OK A a2= b; // OK aussi ; ça donne le même résultat que la ligne précédente, en plus compliqué. A a3; // Erreur : A::A() n'existe pas ! a3= b;
On Sun, 7 Sep 2008 04:47:25 -0700 (PDT), Korchkidu
<korchkidu@gmail.com>:
A a;
B b;
a = b;
Ici, on appelle d'abord les constructeurs puis l'opérateur
On appelle A::A(), puis B::B(), puis :
- soit "A::operator= (B const&)", si elle existe
- soit un opérateur de conversion de B en A, puis l'opérateur de
copie.
B b;
A a = b;
Ici, on appelle directement le constructeur
C'est plus tordu que ça, si A et B sont deux types différents. Cette
expression est équivalente à :
A a (A (b));
En d'autres termes, deux fonctions sont appelées successivement :
A::A (B const&) (ou "B::operator A()", du moins je crois)
A::A (A const&)
donc: pourquoi ? Quel est l'intérêt ?
A n'a pas forcément un opérateur =.
Mais le cas le plus fréquent, c'est que A n'a pas de constructeur sans
argument, et tu ne peux pas écrire "A a;".
class B {};
class A
{
public:
A (B const&);
//...
};
B b;
A a1 (b); // OK
A a2= b; // OK aussi ; ça donne le même résultat que la ligne
précédente, en plus compliqué.
A a3; // Erreur : A::A() n'existe pas !
a3= b;
On Sun, 7 Sep 2008 04:47:25 -0700 (PDT), Korchkidu :
A a; B b; a = b; Ici, on appelle d'abord les constructeurs puis l'opérateur
On appelle A::A(), puis B::B(), puis :
- soit "A::operator= (B const&)", si elle existe
- soit un opérateur de conversion de B en A, puis l'opérateur de copie.
B b; A a = b; Ici, on appelle directement le constructeur
C'est plus tordu que ça, si A et B sont deux types différents. Cette expression est équivalente à :
A a (A (b));
En d'autres termes, deux fonctions sont appelées successivement : A::A (B const&) (ou "B::operator A()", du moins je crois) A::A (A const&)
donc: pourquoi ? Quel est l'intérêt ?
A n'a pas forcément un opérateur =.
Mais le cas le plus fréquent, c'est que A n'a pas de constructeur sans argument, et tu ne peux pas écrire "A a;".
class B {};
class A { public: A (B const&); //... };
B b; A a1 (b); // OK A a2= b; // OK aussi ; ça donne le même résultat que la ligne précédente, en plus compliqué. A a3; // Erreur : A::A() n'existe pas ! a3= b;
Fabien LE LEZ
J'ai écrit :
- soit un opérateur de conversion de B en A,
Une fonction, en fait. Ce n'est pas forcément un opérateur.
En d'autres termes, deux fonctions sont appelées successivement :
À noter que le compilateur peut optimiser : les fonctions en question ne sont pas forcément toutes appelées, mais elles doivent être appelables, i.e. exister et être accessibles.
J'ai écrit :
- soit un opérateur de conversion de B en A,
Une fonction, en fait. Ce n'est pas forcément un opérateur.
En d'autres termes, deux fonctions sont appelées successivement :
À noter que le compilateur peut optimiser : les fonctions en question
ne sont pas forcément toutes appelées, mais elles doivent être
appelables, i.e. exister et être accessibles.
Une fonction, en fait. Ce n'est pas forcément un opérateur.
En d'autres termes, deux fonctions sont appelées successivement :
À noter que le compilateur peut optimiser : les fonctions en question ne sont pas forcément toutes appelées, mais elles doivent être appelables, i.e. exister et être accessibles.
Sylvain SF
Fabien LE LEZ wrote on 07/09/2008 14:36:
J'ai écrit :
- soit un opérateur de conversion de B en A,
Une fonction, en fait. Ce n'est pas forcément un opérateur.
je pense que la 1ière assertion était correcte: il doit exister un operateur de cast vers A défini par B.
s'il existe une fonction comme:
A transformIt(B const&) {}
le compilo n'a aucune raison de l'utiliser.
Sylvain.
Fabien LE LEZ wrote on 07/09/2008 14:36:
J'ai écrit :
- soit un opérateur de conversion de B en A,
Une fonction, en fait. Ce n'est pas forcément un opérateur.
je pense que la 1ière assertion était correcte: il doit exister
un operateur de cast vers A défini par B.
Une fonction, en fait. Ce n'est pas forcément un opérateur.
je pense que la 1ière assertion était correcte: il doit exister un operateur de cast vers A défini par B.
A::A (B const&);
certes mais entre
struct B { }; struct A { A() {} A(B const &) {} };
qui impose à A de connaitre B et/ou a B d'exposer en public ses données.
et
struct A { }; struct B { operator A () const; };
je préfère cette seconde où B utilisera (pourra utiliser) un constructeur public de A.
Sylvain.
Fabien LE LEZ
On Sun, 07 Sep 2008 18:16:42 +0200, Sylvain SF :
je préfère
C'est possible. Mais ce n'est pas la question. Étant données deux classes, si tu veux énumérer les possibilités de conversions de l'une à l'autre, il faut bien évoquer le constructeur.
On Sun, 07 Sep 2008 18:16:42 +0200, Sylvain SF
<sylvain@boiteaspam.info>:
je préfère
C'est possible. Mais ce n'est pas la question. Étant données deux
classes, si tu veux énumérer les possibilités de conversions de l'une
à l'autre, il faut bien évoquer le constructeur.
C'est possible. Mais ce n'est pas la question. Étant données deux classes, si tu veux énumérer les possibilités de conversions de l'une à l'autre, il faut bien évoquer le constructeur.
Korchkidu
Merci à tous pour vos réponses très instructives !
Bonne journée. K.
Merci à tous pour vos réponses très instructives !
Merci à tous pour vos réponses très instructives !
Bonne journée. K.
nicolas reulier
peu t'ont construire efficacement une niche pour un chien dont ont ne connait pas la taille. soit a)le chien est trop gros, il y aura un routage et un partitionnement faisant perdre de la valeur et de efficacité au transport. b)il est trop petit et la il y aura une perte.
réponse déclaration de fin de data. mais le tableau ne sera pas unie-forme et la rechercher ralentie. réponse Ou une déclaration de taille post opératoire.
plus on est flou plus on en scie..
si maintenant je dis :
3=a je connais l'objet je rencontre égale et je sais ou sont les boites ou a=3 ou je prend un ti prépare et je lui fourgue un 3 et merci compilateur magique...
est-il possible utiliser une classe inversable. de type SOE ou SEO référence au soleil....
en polissant votre compréhension.
signez : OPOSSUM de la zone 51. (sous devcpp)
peu t'ont construire efficacement une niche pour un chien dont ont ne
connait pas la taille.
soit
a)le chien est trop gros, il y aura un routage et un partitionnement faisant
perdre de la valeur et de efficacité au
transport.
b)il est trop petit et la il y aura une perte.
réponse déclaration de fin de data.
mais le tableau ne sera pas unie-forme et la rechercher ralentie.
réponse Ou une déclaration de taille post opératoire.
plus on est flou plus on en scie..
si maintenant je dis :
3=a je connais l'objet je rencontre égale et je sais ou sont les boites
ou
a=3 ou je prend un ti prépare et je lui fourgue un 3 et merci compilateur
magique...
est-il possible utiliser une classe inversable.
de type SOE ou SEO référence au soleil....
peu t'ont construire efficacement une niche pour un chien dont ont ne connait pas la taille. soit a)le chien est trop gros, il y aura un routage et un partitionnement faisant perdre de la valeur et de efficacité au transport. b)il est trop petit et la il y aura une perte.
réponse déclaration de fin de data. mais le tableau ne sera pas unie-forme et la rechercher ralentie. réponse Ou une déclaration de taille post opératoire.
plus on est flou plus on en scie..
si maintenant je dis :
3=a je connais l'objet je rencontre égale et je sais ou sont les boites ou a=3 ou je prend un ti prépare et je lui fourgue un 3 et merci compilateur magique...
est-il possible utiliser une classe inversable. de type SOE ou SEO référence au soleil....