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.