Différence entre la classe et la structure

Différence entre la classe et la structure

Avant de comprendre la différence entre la classe et la structure, nous devons connaître quelques concepts de base qui leur sont associés. Sans une compréhension des concepts, il est difficile de comprendre les différences entre les deux.

Qu'est-ce que la classe et l'objet:

Ce sont les deux concepts importants liés à la programmation orientée objet, et elles forment la base pour encadrer les fonctions et les données passant à d'autres fonctions. Pour une meilleure compréhension, nous pouvons le corréler à un exemple réel. Une classe peut être considérée comme un magasin, et un objet peut être l'un des magasins spécifiques individuels tels que l'épicerie, la papeterie, les fruits, etc. Tous les objets partagent les propriétés communes de la classe principale - le magasin - et, à son tour, les objets peuvent avoir leurs propres propriétés exclusives telles qu'une conception spécifique, un éclairage, etc.  À travers les objets, nous pouvons réellement utiliser la classe; Ils forment les instances d'une classe.

Syntaxe d'une classe

Classe Store

des choses de cordes publiques;

Conception publique de cordes;

Syntaxe d'un objet

Store Grocery = new Store ();

STACKAGE STACKET = NOUVEAU STORE ();

Qu'est-ce qu'une structure?

Une structure comprend uniquement les données, et donc elle est utile pour encadrer les exigences de données individuelles via les objets struct. Contrairement à une classe, il manque de fonctions. Voici sa syntaxe:

Struct Grocery_entrance

char entrance_name [50];

int entrance_size;

Grocery_entrance;

Tous les magasins peuvent utiliser «l'entrée» de structure avec des noms et des tailles individuels.

Qu'est-ce que l'héritage?

C'est similaire à la façon dont un fils hérite des biens de son père et, à son tour, le fils peut également ajouter d'autres biens. La classe peut être soit une classe de base, soit une classe dérivée, dans laquelle le premier peut être considéré comme la base pour former le second. La classe dérivée ajoute quelques autres propriétés à part ce qu'elle obtient de la classe de base. Lorsque nous considérons l'exemple ci-dessus, l'épicerie peut toujours être dérivée d'une épicerie spécifique, comme l'épicerie XYZ.

Maintenant que nous connaissons les concepts de base, nous pouvons entrer dans la différence réelle entre la classe et la structure.

Comment diffèrent-ils?

  • Réutilisabilité: Comme les classes forment le cadre de base, ils peuvent être réutilisés; Les structures, cependant, sont des éléments individuels avec des propriétés spécifiques, ils ne peuvent donc pas être réutilisés. Par exemple, la classe d'épicerie peut être utilisée pour tout type d'épicerie, mais la structure Grocery_entrance est spécifique pour cela seul et il est inutile de le réutiliser dans d'autres classes.
  • Visibilité: Toutes les fonctions d'une classe sont accessibles au public à ses objets. Par exemple, nous avons une fonction nommée «Things» sous la classe «magasin». La fonction «choses» est visible à tous ses objets, comme «épicerie,« papeterie », etc. Une telle visibilité n'est pas possible avec les structures car les données de structure sont limitées à elle-même et non visibles par d'autres structures. Pour clarifier les choses, nous pouvons dire que les données de «Grocery_entrance» ne sont pas publiquement visibles pour tous les autres magasins.
  • Passer par référence et passer par valeur: Passer par référence envoie uniquement l'emplacement de la mémoire et non les données réelles aux fonctions. Cela signifie que chaque fois que la valeur change, le changement se reflète dans les fonctions correspondantes. Passer par valeur, à son tour, n'envoie que la valeur à la fonction. Dans ce cas, un changement de valeur après son envoi ne sera pas reflété dans la fonction. La classe utilise Pass par référence, et Struct utilise la valeur de pass.
  • Héritage: Les classes peuvent être héritées pour former des sous-classes, mais les structures ne peuvent pas utiliser l'héritage. Par exemple, le magasin de classe donne ses fonctions à «l'épicerie» de sous-classe. Mais la structure «Grocery_entrance» ne peut hériter d'aucune fonction. Nous pouvons dire qu'il n'y a pas de concept comme la sous-structure ici.
  • Visibilité par défaut: Tous les membres d'une classe sont conservés en tant qu'entités privées par défaut, tandis que les membres d'une structure sont conservés en tant qu'entités publiques par défaut.
  • La taille d'une classe et d'une structure vides: La classe utilise une taille de 1 octet même lorsqu'elle est vide, tandis que la structure n'utilise jamais de mémoire lorsqu'elle est vide. Cela signifie que nous pouvons dire que la taille d'une structure vide est égale à 0 octets.
  • Collecte des ordures: La collecte des ordures est possible avec les classes, car ils utilisent le passage par référence. Par conséquent, il est plus facile de faire le nettoyage à un endroit où les données sont stockées. D'un autre côté, la collecte des ordures n'est pas possible avec Struct, car elle utilise Pass par valeur et les données sont dispersées à différents endroits.
  • Gestion de la mémoire: Parce que la classe permet des collections de déchets, la gestion de la mémoire est également efficace; Cependant, ce n'est pas si efficace avec les structures.
  • Constructeur: Un constructeur initialise généralement la classe avec certaines valeurs spécifiées. Nous pouvons le regarder comme quelque chose qui a été initialisé avec des valeurs. Si une nouvelle classe doit être créée, le constructeur est appelé pour allouer de la mémoire à cette instance. Nous pouvons même transmettre des valeurs comme arguments tout en appelant un constructeur. Voyons à notre discussion réelle maintenant. Les classes permettent aux constructeurs de tous types, comme avec ou sans arguments, tandis que les structures ne permettent que les constructeurs avec des arguments, je.e. les constructeurs paramétrés.
  • Destructeur: Un destructeur est appelé chaque fois que nous avons besoin de supprimer une instance d'une classe. Le destructeur, à son tour, supprime cette instance et libère la mémoire. Une classe peut utiliser un destructeur, alors qu'une structure ne peut pas.
  • Initialisation des variables des membres: Dans les classes, nous pouvons initialiser directement les variables des membres; Une telle initialisation n'est pas possible avec les structures.
  • Création d'objets: La syntaxe générale pour la création d'objets dans les classes est:

Demo obj = new Demo ();

Cela signifie que nous devons utiliser le mot-clé «nouveau» tout en créant des objets d'une classe. Ce n'est pas nécessaire lors de la création d'objets de structures. Jetez un œil à leur syntaxe:

Démo obj;

Cela fonctionne parfaitement même sans le mot-clé «nouveau».

Quand utiliser la classe et quand utiliser la structure?

Comme les classes sont plus flexibles dans la remise des données et des fonctions ensemble, nous pouvons y aller lorsque les objets utilisés sont complexes et grands. Dans notre exemple, un centre commercial peut utiliser le «magasin» de classe pour exprimer le système d'une meilleure manière. Les structures, cependant, sont limitées à des objets plus petits, car ils sont relativement moins efficaces que les classes. Par conséquent, si vous concevez votre propre magasin, les structures sont le meilleur choix.

Comment convertir une structure en classe et vice versa?

Vous avez peut-être entendu les termes «boxe» et «déballage» pour convertir une structure en classe, et vice versa. Bien qu'il s'agisse de processus efficaces pour nous aider dans la conversion, ils devraient être gérés avec prudence. Comme cela affecte directement les emplacements de la mémoire, il y a un impact énorme sur les performances de notre système. De plus, il affecte les processus de collecte des ordures et entraîne une inefficacité globale du système. Par conséquent, utilisez ces conversions uniquement en cas de besoin.

Examinons les différences susmentionnées dans la forme tabulaire.

S.Non Concepts Différences
Classe Structure
1 Réutilisation Complètement réutilisable Non réutilisable
2 Visibilité Toutes les fonctions d'une classe sont visibles à ses objets Les données d'un objet d'une structure ne sont pas visibles par d'autres objets de la même structure
3 Passer par référence et passer par valeur Utilise Pass par référence Utilise Pass par valeur
4 Héritage Les fonctions d'une classe peuvent être héritées par ses sous-classes; permet l'héritage Ne permet jamais l'héritage
5 Visibilité par défaut Tous les membres d'une classe sont privés par défaut Tous les membres d'une structure sont publics par défaut
6 Taille lorsqu'il est vide La taille d'une classe vide est de 1 octet La taille de la structure vide est de 0 octets
7 Collecte des ordures Comme il utilise Pass par référence, la collecte des ordures est possible Comme il utilise Pass par valeur, la collecte des ordures n'est pas possible
8 Gestion de la mémoire La facilité du processus de collecte des ordures aide à une gestion efficace de la mémoire Le manque de collecte des ordures se traduit par une mauvaise gestion de la mémoire
9 Constructeurs Permet aux constructeurs de tous types, comme avec ou sans paramètres Permet uniquement les constructeurs paramétrés
dix Destructeur Peut l'utiliser Ne peut pas l'utiliser
11 Initialisation des variables des membres Permet une initialisation directe des variables des membres N'autorise pas l'initialisation directe des variables des membres
12 Création d'objets Il est indispensable d'utiliser le mot-clé «nouveau» pendant la création d'objets Il est facultatif d'utiliser le mot-clé «nouveau» pendant la création d'objets
13 Quand utiliser? Mieux pour les objets plus grands et complexes où l'héritage est requis Mieux pour les objets plus petits et plus simples où l'héritage est moins important.

Nous avons presque couvert toutes les différences entre la classe et la structure, et si vous sentez que quelque chose manque, veuillez nous savoir. Apprenons ensemble et tirons le meilleur parti de ces connaissances!