Partage
  • Partager sur Facebook
  • Partager sur Twitter

Instance de classe A dans classe B

Une méthode de classe et la lecture des attributs de cette classe

30 juin 2017 à 10:50:28

Est-ce que quelqu'un a pensé à dire qu'il n'y avait pas un m_x, mais autant que d'objets de la classe A ?

Et que "le champ m_x est initialisé par le constructeur de A", c'est un raccourci pour "le champ m_x d'une instance de A est initialisé quand son constructeur (son = de l'instance) est exécuté"

pédagogie, répétition, toussa.

-
Edité par michelbillaud 30 juin 2017 à 10:51:10

  • Partager sur Facebook
  • Partager sur Twitter
30 juin 2017 à 12:27:53

class A
{
private:
    int m_x;
public
    A(): m_x{99}
    {
    }
};

int main()
{
    // chaque declaration appelle le constructeur

        // 1er appel
    A instance1;

        // 2e appel
    A instance2;
}

Conslusion:
A chaque instanciation d'une variable, il y a un appel au constructeur de la classe.

Et c'est toujours la même chose, ce sont des variables différentes, donc chacune est construite indépendement de l'autre.
Et dans le cadre des objets, chaque variable possède ses propres données membres, ainsi que ses propres fonction membres, qui n'effectuent absolument aucune interraction avec l'objet du voisin.

Ou pour être plus clair, chaque objet va embarquer "une copie du code de la classe".
Tant que l'OP fera l'amalgame entre la classe, qui est un patron (ou modèle), et les objets, qui sont des instances de la classe, indépendantes l'une de l'autre, il ne pourra pas avancer.

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
1 juillet 2017 à 8:49:58

Messieurs le duo aux croissants

Je croyais en avoir pratiquement terminé avec ce sujet mais vous me contraignez à revenir. Pour le débutant ignorant que je suis vous me donnez l’impression de vous retrancher derrière des préceptes généraux plutôt que de vous livrer à la moindre réflexion susceptible d’apporter des éclaircissements. Je vais donc engager le fer avec vous, à fleuret moucheté bien entendu comme des gens civilisés.

S’il m’arrive, par facilité de langage, d’utiliser le verbe « pointer » je le mettrai entre «  » de façon à ce qu’il ne soit pas confondu avec*.

A l’image de vos réponses, devant une demande d’explication concernant l’opérateur « et » vous avanceriez comme une litanie que l’expression « A et B = C »  est vrai si et seulement si A et B sont vraies. Vous auriez raison …sauf que toute la difficulté de cette expression réside dans la difficulté de faire la part pour « A » et « B » de ce qui est vrai de ce qui est faux. Sans quoi l’application irréfléchie de cette expression dans le cas par exemple où est considérée comme vrai l’affirmation « Les choses rares sont chères » et vrai l’affirmation « Les choses bon marché sont rares » conduit à celle « Les choses bon marché sont chères ». Je ne m’appelle pas sophiste.

De même sur un autre registre avancer « toutes les voitures ont des portières » et «  chaque voiture a des portières » n’est pas susceptible malgré les apparences, de répondre à l’opérateur d’égalité.

Avant d’en venir au vif, j’ajoute qu’au cas particulier du petit programme exemple, il n’a pas dû vous échapper, alors que l’expression dans la classe B « ma.foo() ; » a pour fonction de «pointer » sur foo() méthode de la classe A pour « récupérer » la valeur  en retour ne récupère une bonne valeur que si et seulement si le retour est mentionné sous la forme « return int » et non « return m_x ». Dans cette dernière écriture c’est la valeur de l’instance de A dans B qui est retournée, si on peut dire. Je ne sais pas ce qu’il en est pour vous mais moi ça me pose un problème de compréhension. 

Après ces généralités j’en viens au corps du sujet.

M michelbillaud

a écrit : "le champ m_x est initialisé par le constructeur de A, c'est un raccourci pour le champ m_x d'une instance de A est initialisé quand son constructeur (son = de l'instance) est exécuté"

Sous une formulation de sagesse évidente type genre maître Yoda, , « m_a » pourtant instance de A est bien initialisée par le constructeur de la classe dans laquelle elle est déclarée mais pas par celui de sa classe ce qui serait pour le moins contradictoire avec les fonctions de la fonction constructeur. Si c’est pour débiter ce genre de préceptes vous devriez envisager de vous reconvertir bonimenteur.

M deedolith

a écrit: chaque instanciation d'une variable, il y a un appel au constructeur de la classe.

Et c'est toujours la même chose, ce sont des variables différentes, donc chacune est construite indépendamment de l'autre.

Je salue un autre Yoda : le champ « m_x » de l’instance de A dans A est réinitialisé (c-à-d initialisé une seconde fois) par l’objet B à la valeur de l’instance de B dans B. Exit apparemment l’indépendance entre variables. L’indépendance ne se gagne en général qu’à l issue d’une longue lutte.

Conclusion : le duo aux croissants devrait se pencher sérieusement sur le problème ou s’abstenir plutôt que de ressasser des règles élémentaires comme un intégriste sa bible du C++..

Si on continue sur ces bases nous n’arriverons à rien si ce n’est à des échanges stériles. Alors au lieu de vous comporter comme des publicistes prenez la peine de lire d’abord de comprendre ensuite. Si vous souhaitez une copie de la console je suis à votre disposition. Une réponse dans le genre « Ecoute nous voulons bien te croire mais donnes nous le résultat que tu as obtenu sur console que nous puissions l’examiner sans faire nous-même l’effort de l’obtenir par nous-même » serait plus constructive qu’un leitmotiv né d’un sentiment de supériorité envers un débutant.

Pour ma part mes résultats sont ce qu’ils sont mais pour moi ils sont incontestables. Alors me présenter des explications vaseuses susceptibles de les contredire me donne plus de rides à force de rigoler que la nature ne m’en donne naturellement.

Papi peut-être mais pas papi gâteux.

Salutations

Il faut vieillir ou mourir jeune

  • Partager sur Facebook
  • Partager sur Twitter
1 juillet 2017 à 11:52:04

Plusieurs personnes ont pris le temps de te lire, de tester tes codes, de t'expliquer de différentes facon pourquoi les résultats que tu obtiens sont corrects. Et toi, quelle qu'en soit la raison, tu n'arrives à comprendre ces explications, et surtout tu deviens MÉPRISANT.

Je crois qu'il faut clore cette discussion. Lis et relis plusieurs fois les messages, tu as toutes les informations pour comprendre.

  • Partager sur Facebook
  • Partager sur Twitter
1 juillet 2017 à 12:08:16

Voir message ci dessus.
  • Partager sur Facebook
  • Partager sur Twitter

Je ne suis plus modérateur, ne me contactez plus pour des demandes, je n'y répondrai pas.