179 votes

Quelle différence est Objective-C de C++ ?

Quelles sont les principales différences entre l’Objective-C et C++ en ce qui concerne la syntaxe, les caractéristiques, les paradigmes, les cadres et les bibliothèques ?

  • Important : Mon but est ne pas de déclencher une guerre de performance entre les deux langues. Je veux seulement faits réel durs. En fait, ma question n’est pas liée à la performance ! S’il vous plaît fournir les sources pour tout ce qui peut paraître subjectif.

193voto

Mac Points 8532

Courte liste de quelques-unes des principales différences:

  • C++ permet d'héritage multiple en java, Objective-C ne l'est pas.
  • Contrairement au C++, Objective-C permet paramètres de la méthode, pour être nommé et la signature de la méthode ne comprend que les noms et les types des paramètres et le type de retour (voir bbum et Chuck commentaires ci-dessous). En comparaison, une fonction de membre C++ signature contient le nom de la fonction en tant que bien que les types des paramètres/retour (sans leurs noms).
  • C++ utilise bool, true et false, Objective-C utilise BOOL, YES et NO.
  • C++ utilise void* et NULL, Objective-C préfère id et nil.
  • Objective-C utilise des "sélecteurs" (type SEL) comme un équivalent approximatif de pointeurs de fonction.
  • Objective-C utilise un paradigme de messagerie (à la Smalltalk) où vous pouvez envoyer des "messages" à des objets par le biais de méthodes/sélecteurs.
  • Objective-C sera heureux de vous permettent d'envoyer un message à l' nil, à la différence de C++ qui va planter si vous essayez d'appeler une fonction membre d' NULL
  • Objective-C permet de répartition dynamique, permettant à la classe de répondre à un message qui doit être déterminé au moment de l'exécution, à la différence de C++ où l'objet une méthode est appelée lors de doit être connue au moment de la compilation (voir wilhelmtell de commentaire ci-dessous). Ceci est lié au point précédent.
  • Objective-C permet autogeneration des accesseurs pour les variables de membre à l'aide de "propriétés".
  • Objective-C permet d'assigner à l' self, et permet à la classe initialisers (similaire aux constructeurs) pour retourner un de complètement différent de la classe, si désiré. Contrairement à C++, où si vous créez une nouvelle instance d'une classe (soit implicitement sur la pile, ou de manière explicite par le biais new), il est garanti pour être de type spécifié.
  • De même, en Objective-C d'autres classes peuvent aussi modifier dynamiquement une classe cible au moment de l'exécution d'intercepter les appels de méthode.
  • Objective-C manque de la fonctionnalité des espaces de noms de C++.
  • Objective-C ne dispose pas d'un équivalent C++ références.
  • Objective-C manque de modèles, préférant (par exemple) pour permettre à la faiblesse de frappe dans les conteneurs.
  • Objective-C n'autorise pas les implicites de la surcharge de méthode, mais le C++ n'. C'est, en C++ int foo (void) et int foo (int) définir une fonction implicite de surcharge de la méthode de foo, mais pour atteindre le même Objectif-C nécessite l'explicite surcharges - (int) foo et - (int) foo:(int) intParam. Cela est dû à l'Objective-C est nommé paramètres étant fonctionnellement équivalent à C++'s name mangling.
  • Objective-C sera heureux de permettre à une méthode et une variable de partager le même nom, à la différence de C++, qui ont généralement des ajustements. J'imagine que c'est quelque chose à voir avec Objective-C à l'aide de sélecteurs au lieu de pointeurs de fonction, et donc les noms de méthode de ne pas avoir réellement une "valeur".
  • Objective-C ne permet pas de créer des objets sur la pile - tous les objets doivent être alloués dans le tas (soit explicitement, avec un alloc message, ou implicitement dans une usine de la méthode).
  • Comme C++, Objective-C, a à la fois les structures et les classes. Cependant, là où en C++, ils sont traités comme presque exactement la même, en Objective-C, ils sont traités sauvagement différemment - vous pouvez créer des structures sur la pile, par exemple.

À mon avis, probablement la plus grande différence est la syntaxe. Vous pouvez obtenir essentiellement les mêmes choses dans les deux langues, mais à mon avis, la syntaxe C++ est plus simple alors que certains d'Objective-C caractéristiques font de certaines tâches (telles que l'interface graphique de conception) plus facile grâce à la dynamique de l'expédition.

Probablement beaucoup d'autres choses aussi que j'ai raté, je vais mettre à jour avec toutes les autres choses auxquelles je pense. Autre que cela, pouvez vous recommande fortement le guide LiraNuna pointu. Par ailleurs, un autre site d'intérêt pourrait être cette.

Je tiens également à souligner que je viens juste de commencer l'apprentissage Objective-C moi-même, et, comme telle, beaucoup de ce qui précède peut ne pas être tout à fait correcte ou complète je prie de m'excuser si c'est le cas, et bienvenue suggestions d'amélioration.

EDIT: mis à jour pour prendre en considération les points soulevés dans les observations suivantes, a ajouté un peu plus d'éléments à la liste.

36voto

Georg Fritzsche Points 59185

Alors qu'ils sont à la fois enracinée dans C, ils sont deux choses complètement différentes langues.

Une différence importante est que l'Objective-C est axé sur l'exécution des décisions de l'expédition et dépend fortement de sa bibliothèque d'exécution pour gérer l'héritage et le polymorphisme, alors qu'en C++, l'accent se trouve généralement sur la statique, de la compilation, les décisions.

Concernant les bibliothèques, vous pouvez utiliser du C des bibliothèques dans les deux langues - mais leurs bibliothèques natives sont complètement différents.

D'intérêt est que vous pouvez mélanger les deux langues (avec certaines limitations). Le résultat est appelé Objective-C++.

7voto

Rev316 Points 1185

Sur le dessus de ma tête :

  1. Styles - Obj-C est dynamique, C++ est généralement statique
  2. Bien qu’ils soient tous deux OOP, je suis certain que les solutions seraient différentes.
  3. Modèle d’objet différent (C++ est limitée par son système de type de compilation).

Pour moi, la plus grande différence est le système de modèle. Obj-C vous permet de faire de la messagerie et introspection, mais C++ offre les modèles jamais-sorte-puissant.

Ont chacun leurs points forts.

6voto

Dean Harding Points 40164

Ils sont complètement différents. Objective C a plus en commun avec Smalltalk qu’avec C++ (ainsi, à l’exception de la syntaxe, vraiment).

5voto

Michael Ekstrand Points 12849

Comme d'autres l'ont dit, Objective-C est beaucoup plus dynamique en termes de la façon dont il pense des objets vs C++assez statique royaume.

Objective-C, étant dans la Causerie de la lignée des langages orientés objet, a une notion d'objets qui est très similaire à celle de Java, Python et autres "standard", et non C++ langages orientés objet. Beaucoup de répartition dynamique, pas de surcharge d'opérateur, d'envoyer des messages autour de.

C++ est son propre étrange animal; il a surtout sauté le Smalltalk partie de l'arbre généalogique. À certains égards, il a un bon système de module avec le soutien de l'héritage qui arrive à être capable d'être utilisé pour la programmation orientée objet. Les choses sont beaucoup plus statiques (méthodes substituables ne sont pas par défaut, par exemple).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X