Orienté Objet
MonCplusplus
Messages postés
21
Date d'inscription
Statut
Membre
Dernière intervention
-
MonCplusplus Messages postés 21 Date d'inscription Statut Membre Dernière intervention -
MonCplusplus Messages postés 21 Date d'inscription Statut Membre Dernière intervention -
Bonjour, alors vois voilà j'ai commencé à m'intéresser à la programmation orienté objet cependant certains points ambiguë m'interpelle non pas sur des cas concrets mais sur des points "Théoriques" à savoir:
1)La Redéfinition des Opérateurs (surcharges) : Certes il est possible en c++ de redéfinir un ensemble d'opérateur tel que l'opérateur de décalage(shift) permettant d'afficher (<<) ou d'entrer (>>) différentes valeurs pour des objets cependant j'ai du mal à assimilé l'opérateur de comparaison (==) en effet il est possible de comparer des objets cependant à l' instar des autres opérateurs que j'ai cité il n'est possible que de comparé 2 objets à la foi pour l'opérateur de comparaison n'est-il pas possible de comparer plusieurs objet à la fois en re définissant l'opérateur ? Genre pouvoir faire : obj1==obj2==obj3? Pcq il me semble que sur certains opérateurs il est possible de faire un appel dis en "cascade" mais pas sur tout pourquoi ?
2)Table d'objet statique: j'ai également du mal à comprendre pourquoi en créant une table d'objet statique genre Jouet jouets[10] // table de 10 objet jouets il n'est pas possible par exemple de construire un objet de cette maniere Jouet jouet[0]("guerrier", "peluche") ; // On suppose dans la classe Jouet qu'un constructeur à été défini avec 2 paramètres. Donc construire un objet avec un constructeur "spéciale" défini au préalable, ce qui est troublant c'est que il est tout à fait possible de le faire avec des objet dynamiques Jouet *jouet[10]; jouet[0]= new Jouet("guerrier", "peluche").
Merci d'avance pour vos éventuelles interventions et éclaircissements.
1)La Redéfinition des Opérateurs (surcharges) : Certes il est possible en c++ de redéfinir un ensemble d'opérateur tel que l'opérateur de décalage(shift) permettant d'afficher (<<) ou d'entrer (>>) différentes valeurs pour des objets cependant j'ai du mal à assimilé l'opérateur de comparaison (==) en effet il est possible de comparer des objets cependant à l' instar des autres opérateurs que j'ai cité il n'est possible que de comparé 2 objets à la foi pour l'opérateur de comparaison n'est-il pas possible de comparer plusieurs objet à la fois en re définissant l'opérateur ? Genre pouvoir faire : obj1==obj2==obj3? Pcq il me semble que sur certains opérateurs il est possible de faire un appel dis en "cascade" mais pas sur tout pourquoi ?
2)Table d'objet statique: j'ai également du mal à comprendre pourquoi en créant une table d'objet statique genre Jouet jouets[10] // table de 10 objet jouets il n'est pas possible par exemple de construire un objet de cette maniere Jouet jouet[0]("guerrier", "peluche") ; // On suppose dans la classe Jouet qu'un constructeur à été défini avec 2 paramètres. Donc construire un objet avec un constructeur "spéciale" défini au préalable, ce qui est troublant c'est que il est tout à fait possible de le faire avec des objet dynamiques Jouet *jouet[10]; jouet[0]= new Jouet("guerrier", "peluche").
Merci d'avance pour vos éventuelles interventions et éclaircissements.
A voir également:
- Orienté Objet
- Vente objet occasion entre particulier - Guide
- Objet interdit en cabine ryanair - Guide
- Identifier un objet à partir d'une photo - Guide
- Mesurer un objet - Guide
- Vous devez disposer d'autorisations d'accès en lecture pour afficher les propriétés de cet objet - Guide
1 réponse
Bonjour,
1. redéfinition des opérateurs
Aucun opérateur n'a un mode "cascade".
Si on écrit
Pour l'opérateur égal, lui aussi a un regroupement à gauche.
Conclusion pour certain opérateurs, c'est possible de les cascader. Pour d'autre ça doit être impérativement évité, si on veut 2 tests d'égalité on les écrits :
2. Table d'objets statiques
On peut tout à fait initialiser les tableaux et les éléments de tableau. Il faut cependant bien comprendre ce qu'il se passe.
1. redéfinition des opérateurs
Aucun opérateur n'a un mode "cascade".
Si on écrit
std::cout << "hello " << "world";, un regroupement est effectué, il est de gauche à droite pour l'opérateur
<<, il se produit donc
(std::cout << "hello ") << "world";, le résultat de l'opérateur retransmets son membre gauche, d'où c'est équivalent à :
std::cout << "hello ", std::cout << "world";
Pour l'opérateur égal, lui aussi a un regroupement à gauche.
obj1==obj2==obj3est donc vu
(obj1==obj2)==obj3. On compare donc obj1 et obj2, et son résultat (qui est true ou false) est ensuite comparé à obj3, ce qui a rarement un sens. Si on essaie
if ( 1 == 2 == 0 ), cela est vrai! car devient
if ( (1==2) == 0 )donc
if ( false == 0 )donc
if ( 0 == 0 ).
Conclusion pour certain opérateurs, c'est possible de les cascader. Pour d'autre ça doit être impérativement évité, si on veut 2 tests d'égalité on les écrits :
if ( 1==2 && 2==0 ).
2. Table d'objets statiques
On peut tout à fait initialiser les tableaux et les éléments de tableau. Il faut cependant bien comprendre ce qu'il se passe.
class Jouet { public: Jouet() {} // cas d'un Jouet sans caractéristique connue Jouet( std::string type , std::string forme ); }; int main() { Jouet jouets[2] { Jouet("guerrier","peluche") , Jouet("guerrier","peluche") }; // Ok Jouet autre[10]; // ok on a pu construire 10 jouets de caractéristiques inconnues (constructeur par défaut) jouets[0] = Jouet("guerrier","peluche"); // ok on a copié un nouveau jouet dans le jouet du tableau (constructeur à 2 paramètres, suivi de l'opérateur de copie) jouets[1] = {"voiture", "plastique"}; // marche aussi depuis 2011 Jouet etAussi[2] { {"guerrier","peluche"} , {"voiture","plastique"} }; // Ok depuis 2011 }Si on supprime la ligne 3, alors la ligne 8 ne compilera plus car on sera incapable de construire des objets sans avoir les données de construction.
Si on utilise une collection de taille adaptative (donc toutes sauf le tableau), là on pourra créer l'objet au moment opportun.