Wie anders ist Objective-C von C ++?
Was sind die wichtigsten Unterschiede zwischen Objective-C und C++ in Bezug auf die syntax, Funktionen, Modelle, frameworks und libraries?
*Wichtig: Mein Ziel ist es nicht, eine Leistung der Krieg zwischen den beiden Sprachen. Ich will nur echte harte Fakten. In der Tat, meine Frage ist nicht in Bezug auf Leistung! Bitte geben Sie Quellen für alles, mag subjektiv.
InformationsquelleAutor der Frage Alerty | 2010-03-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kurze Liste der einige der wichtigsten Unterschiede:
bool
true
undfalse
Objective-C verwendetBOOL
YES
undNO
.void*
undnullptr
Objective-C bevorzugtid
undnil
.SEL
) als annähernd gleichwertig zu Funktionszeigern.nil
im Gegensatz zu C++, die Abstürzen, wenn Sie versuchen, rufen Sie ein Mitglied die Funktion desnullptr
Objective-C ermöglicht eine dynamic dispatch, so dass die Klasse der Reaktion auf eine Meldung während der Laufzeit festgelegt, im Gegensatz zu C++, wo das Objekt eine Methode aufgerufen wird, nach werden müssen zum Zeitpunkt der Kompilierung bekannt (siehe wilhelmtell Kommentar unten). Dies ist im Zusammenhang mit dem vorherigen Punkt.self
und ermöglicht es Klasse initialisers (ähnlich wie Konstruktoren), um wieder eine völlig andere Klasse, falls gewünscht. Gegensatz zu C++, wo, wenn Sie erstellen Sie eine neue Instanz einer Klasse (entweder implizit auf dem stack, oder explizit durchnew
) es ist garantiert der Typ, den Sie ursprünglich angegeben haben.int foo (void)
undint foo (int)
definieren eine implizite überladung der Methodefoo
aber zur Erreichung derselben in Objective-C-Bedarf der ausdrücklichen überlastungen- (int) foo
und- (int) foo:(int) intParam
. Dies ist aufgrund Objective-C benannte Parameter, die funktionell äquivalent zu C++name mangling.alloc
Nachricht, oder implizit in eine entsprechende factory-Methode).Meiner Meinung nach, wahrscheinlich der größte Unterschied ist die syntax. Sie erreichen im wesentlichen die gleichen Dinge in beiden Sprachen, aber meiner Meinung nach der C++ - syntax ist einfacher, während einige Objective-C, s-features machen bestimmte Aufgaben (GUI-design) einfacher, Dank dynamic dispatch.
Wahrscheinlich eine Menge anderer Dinge zu, die ich verpasst habe, werde ich das update für alle anderen Dinge, die ich denke. Other than, die empfehle den guide LiraNuna Spitzen Sie zu. Übrigens ein weiterer Ort von Interesse sein könnte diese.
Sollte ich auch darauf hinweisen, dass ich bin gerade erst lernen Objective-C selber, und als solcher eine Menge von den oben genannten vielleicht nicht ganz korrekt oder vollständig - ich bitte um Entschuldigung, wenn das der Fall ist, und begrüßen Vorschläge für Verbesserungen.
EDIT: aktualisiert, um die angesprochenen Punkte in den folgenden Ausführungen, noch ein paar mehr Elemente in die Liste ein.
InformationsquelleAutor der Antwort Mac
Während Sie sind beide verwurzelt in C sind das zwei völlig verschiedene Sprachen.
Ein wichtiger Unterschied ist, dass Objective-C ist ausgerichtet auf Laufzeit-Entscheidungen zur Disposition und hängt stark von Ihrer Laufzeit-Bibliothek zu behandeln, Vererbung und Polymorphismus, während in C++ der Fokus liegt in der Regel auf statischen compile-Zeit, Entscheidungen zu treffen.
Bezug auf Bibliotheken, können Sie einfach die C-Bibliotheken, die in beiden Sprachen - aber Ihre native Bibliotheken sind komplett anders.
Interesse ist jedoch, dass Sie können mischen beide Sprachen (mit einigen Einschränkungen). Das Ergebnis nennt sich Objective-C++.
InformationsquelleAutor der Antwort Georg Fritzsche
Aus der Spitze von meinem Kopf:
normalerweise statisch
bestimmte Lösungen werden würde
anders.
eingeschränkt durch seine compile-Zeit-Typ
system).
Mir, der größte Unterschied ist die Modell-system. Obj-C können Sie tun, messaging-und Introspektion, aber C++ hat sich das immer so leistungsfähige Vorlagen.
Haben jeweils Ihre stärken.
InformationsquelleAutor der Antwort Rev316
Sind Sie völlig anders. Objective C hat mehr Gemeinsamkeiten mit Smalltalk, als mit C++ (naja, bis auf die syntax, wirklich).
InformationsquelleAutor der Antwort Dean Harding
Wie schon andere gesagt haben, Objective-C ist viel mehr Dynamik in Bezug auf, wie Sie denkt und Objekte vs. C++'s relativ statisch Reich.
Objective-C, die in den Smalltalk-Linie von Objekt-orientierten Sprachen, hat ein Konzept von Objekten, die ist sehr ähnlich wie Java, Python, und andere "standard", nicht-C++ Objekt-orientierte Sprachen. Vielen dynamischen dispatch, kein operator-overloading, senden von Nachrichten um.
C++ ist seine eigene seltsame Tier; es meistens übersprungen, den Smalltalk-Teil der Familie Baum. In einige Möglichkeiten, es hat eine gute Modul-system mit Unterstützung für Vererbung, die passiert werden in der Lage zu sein verwendet für die Objekt-orientierte Programmierung. Die Dinge sind viel mehr statische (überschreibbare Methoden sind nicht der Standard, zum Beispiel).
InformationsquelleAutor der Antwort Michael Ekstrand
Objective-C ist eine perfekte Obermenge von C. In C und Objective-C implizite Typumwandlung von
void*
auf einen struct-pointer erlaubt ist.C++ nicht kompilieren, es sei denn, die
void
- Zeiger wird explizit Darsteller:Die Relevanz dieser zu jeder Tages-Programmierung ist null, nur ein Spaß trivia Tatsache.
InformationsquelleAutor der Antwort Igor Zevaka
Obj-C hat viel mehr dynamische Möglichkeiten in der Sprache selbst, in der Erwägung, dass C++ ist der Schwerpunkt mehr auf compile-Zeit-Funktionen mit einigen dynamischen Fähigkeiten.
In C++ parametrischen Polymorphismus geprüft wird zur compile-Zeit, in der Erwägung, dass in Obj-C, parametric Polymorphismus wird erreicht durch dynamic dispatch und wird nicht überprüft, zu compile-Zeit.
Obj-C ist sehr dynamisch in der Natur. Sie können hinzufügen von Methoden zu einer Klasse während der Laufzeit. Außerdem verfügt es über Introspektion zur Laufzeit zu betrachten Klassen. In C++ die definition der Klasse nicht ändern können, und alle Selbstbeobachtung getan werden muss zur compile-Zeit. Obwohl, die dynamische Natur von Obj-C konnten erzielt werden in C++ mit Hilfe der Karte von Funktionen(oder so ähnlich), ist es noch Ausführlicher als im Obj-C.
In C++, es gibt eine Menge mehr Kontrollen, die getan werden kann zur compile-Zeit. Zum Beispiel mit einer Variante geben(wie eine Gewerkschaft) der compiler kann erzwingen, dass in allen Fällen sind schriftliche oder behandelt werden. Damit Sie nicht vergessen, über den Umgang mit der edge-Fällen ein problem. Jedoch, alle diese Prüfungen kommen auf einen Preis beim kompilieren. Obj-C ist viel schneller beim kompilieren als C++.
InformationsquelleAutor der Antwort Paul Fultz II