C / C++: Unterschied zwischen den Versionen
K |
(zum-wiki:) |
||
(8 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | Auf dieser Seite wird | + | {{Korrekter Titel|C / C++}} |
+ | [[Kategorie:Programmiersprachen]] | ||
+ | |||
+ | Auf dieser Seite wird Grundlegendes zu den Programmiersprachen C, vor allem aber zu C++ erscheinen. | ||
__TOC__ | __TOC__ | ||
Zeile 6: | Zeile 9: | ||
<blockquote>C++ ist eine von der ISO genormte Programmiersprache. Sie wurde ab 1979 von Bjarne Stroustrup bei AT&T als Erweiterung der Programmiersprache C entwickelt. C++ ermöglicht sowohl die effiziente und maschinennahe Programmierung als auch eine Programmierung auf hohem Abstraktionsniveau. ([http://de.wikipedia.org/wiki/C%2B%2B Wikipedia])</blockquote> | <blockquote>C++ ist eine von der ISO genormte Programmiersprache. Sie wurde ab 1979 von Bjarne Stroustrup bei AT&T als Erweiterung der Programmiersprache C entwickelt. C++ ermöglicht sowohl die effiziente und maschinennahe Programmierung als auch eine Programmierung auf hohem Abstraktionsniveau. ([http://de.wikipedia.org/wiki/C%2B%2B Wikipedia])</blockquote> | ||
− | C++ ist abwärtskompatibel, d.h., die Syntax erlaubt sämtlichen C-Code. C und C++ sind | + | C++ ist abwärtskompatibel, d.h., die Syntax erlaubt sämtlichen C-Code. Dabei bietet C++ mehr Möglichkeiten als C und ist C somit eher vorzuziehen. |
+ | |||
+ | C und C++ sind auf nahezu allen Plattformen existent, es gibt unzählige in C bzw. C++ geschriebene Anwendungen und Funktionsbibliotheken. | ||
== Quelltext => Anwendung == | == Quelltext => Anwendung == | ||
Zeile 26: | Zeile 31: | ||
} | } | ||
bzw.: | bzw.: | ||
− | #include < | + | #include <stdio.h> //C |
+ | #include <cstdio.h> //C++ | ||
int main() | int main() | ||
{ | { | ||
Zeile 32: | Zeile 38: | ||
} | } | ||
− | Eine Konsolenanwendung, die einen Integer einliest und dessen Quadratzahl berechnet: | + | Eine Konsolenanwendung, die einen [[int|Integer]] einliest und dessen Quadratzahl berechnet: |
#include <iostream> | #include <iostream> | ||
Zeile 42: | Zeile 48: | ||
} | } | ||
bzw.: | bzw.: | ||
− | #include < | + | #include <stdio.h> //C |
+ | #include <cstdio.h> //C++ | ||
int main() | int main() | ||
{ | { | ||
int a; | int a; | ||
− | scanf("%d",a); | + | scanf("%d",&a); |
printf("%d",(a*a)); | printf("%d",(a*a)); | ||
} | } | ||
− | == Eine | + | == Eine Funktion erstellen == |
Das Programm soll wie im vorangegangenen Beispiel die Quadratzahl einer eingelesenen Zahl ausgeben: | Das Programm soll wie im vorangegangenen Beispiel die Quadratzahl einer eingelesenen Zahl ausgeben: | ||
Zeile 65: | Zeile 72: | ||
std::cout << sq(a) << endl; | std::cout << sq(a) << endl; | ||
} | } | ||
+ | |||
+ | sq ist hierbei eine Funktion, welche als Parameter einen Integer entgegen nimmt und einen Integer zurückgibt. | ||
+ | main ist auch eine Funktion. Allerdings nimmt sie keinen Parameter entgegen und gibt einen Integer zurück. Bei der Funktion main gibt dieser Rückgabewert Auskunft darüber, ob das Programm korrekt beendet wurde, eine 0 oder gar kein Rückgaewert stehen für eine erfolgreiche Beendigung, alles Andere für eine nicht erfolgreiche Beendigung. | ||
+ | |||
+ | == Klassen und Vererbung== | ||
+ | (nur C++) | ||
+ | |||
+ | Eine Klasse repräsentiert ein Objekt, sie ist quasi eine Schablone für diese Art Objekt. | ||
+ | Beispiel: | ||
+ | |||
+ | class Apfel{ }; | ||
+ | |||
+ | Eine Klasse, die einen Apfel darstellt. | ||
+ | |||
+ | Um nun einen neuen Apfel zu erhalten ruft man einen Konstruktor auf, welcher das Erstellen eines neuen Apfels übernimmt: | ||
+ | |||
+ | Apfel A(); | ||
+ | Apfel B = Apfel(); | ||
+ | |||
+ | === Eigene Konstruktoren definieren === | ||
+ | |||
+ | Sei die Klasse Apfel nun etwas komplexer: | ||
+ | |||
+ | class Apfel | ||
+ | { | ||
+ | public: | ||
+ | std::string Name; | ||
+ | int Gewicht; | ||
+ | }; | ||
+ | |||
+ | Um den Äpfeln A und B nun einen Namen oder ein Gewicht zuzuweisen schreibt man: | ||
+ | |||
+ | A.Name = "Apfel A"; | ||
+ | B.Gewicht = 100; | ||
+ | |||
+ | Da dies mitunter lästig sein kann, bietet C++ die Möglichkeit eigene Konstruktoren zu definieren und so z.B. beim Erstellen eines neuen Apfels diesem gleich einen Namen und ein Gewicht zuzuweisen: | ||
+ | |||
+ | class Apfel | ||
+ | { | ||
+ | public: | ||
+ | std::string Name; | ||
+ | int Gewicht; | ||
+ | Apfel(); // Der Standard-Konstruktor | ||
+ | Apfel(std::string name,int gewicht); // Deklaration eines eigenen Konstruktors. | ||
+ | }; | ||
+ | |||
+ | Apfel::Apfel(std::string name,int gewicht) //Definition des eigenen Konstruktors. | ||
+ | { | ||
+ | this->Name = name; | ||
+ | this->Gewicht = gewicht; | ||
+ | } | ||
+ | |||
+ | Apfel A = Apfel("Apfel A",100); | ||
+ | Apfel B("Apfel B",50); | ||
+ | |||
+ | === Vererbung === | ||
+ | C++ erlaubt es, dass Klassen voneinander Erben: | ||
+ | |||
+ | class A { ... }; | ||
+ | |||
+ | class B : public A { ... }; | ||
+ | |||
+ | In diesem Fall übernimmt B alle öffentlichen Felder von A: | ||
+ | |||
+ | class A { | ||
+ | public: | ||
+ | int a; | ||
+ | }; | ||
+ | |||
+ | class B : public A { }; | ||
+ | |||
+ | ... | ||
+ | |||
+ | B b; b.a = 42; | ||
== Literatur == | == Literatur == | ||
− | Brian W. Kernighan, Dennis Ritchie: Programmieren in C Hanser Fachbuch, 2. Auflage, 1990, ISBN 3-446-15497-3. | + | * Brian W. Kernighan, Dennis Ritchie: Programmieren in C Hanser Fachbuch, 2. Auflage, 1990, ISBN 3-446-15497-3. |
− | Bjarne Stroustrup: Die C++-Programmiersprache. 4. Auflage. Addison-Wesley, 2009, ISBN 978-3-8273-2823-6 (Das Standardwerk) | + | * Bjarne Stroustrup: Die C++-Programmiersprache. 4. Auflage. Addison-Wesley, 2009, ISBN 978-3-8273-2823-6 (Das Standardwerk) |
+ | |||
+ | |||
+ | |||
+ | [[zum-wiki:C]] |
Aktuelle Version vom 16. Februar 2015, 19:59 Uhr
Der korrekte Titel dieses Artikels lautet C / C++. Diese Schreibweise ist aufgrund technischer Einschränkungen nicht möglich. |
Auf dieser Seite wird Grundlegendes zu den Programmiersprachen C, vor allem aber zu C++ erscheinen.
Inhaltsverzeichnis |
Vorab
C++ ist eine von der ISO genormte Programmiersprache. Sie wurde ab 1979 von Bjarne Stroustrup bei AT&T als Erweiterung der Programmiersprache C entwickelt. C++ ermöglicht sowohl die effiziente und maschinennahe Programmierung als auch eine Programmierung auf hohem Abstraktionsniveau. (Wikipedia)
C++ ist abwärtskompatibel, d.h., die Syntax erlaubt sämtlichen C-Code. Dabei bietet C++ mehr Möglichkeiten als C und ist C somit eher vorzuziehen.
C und C++ sind auf nahezu allen Plattformen existent, es gibt unzählige in C bzw. C++ geschriebene Anwendungen und Funktionsbibliotheken.
Quelltext => Anwendung
Um aus C- oder C++-Quelltext Anwendungen zu erstellen werden im Groben zwei Programme benötigt:
- Der Compiler macht aus einer Quelltextdatei eine Objektdatei. Objektdateien bestehen grob aus Maschinencode und symbolischen Referenzen auf Daten und Funktionen.
- Der Linker macht aus (verschiedenen) Objektdateien eine ausführbare Datei, die Anwendung.
Compiler als auch Linker werden durch die Kommandozeile aufgerufen.
Da diese Art des Kompilierens von C/C++ mitunter sehr Nerven- und Zeitaufwändig sein kann, gibt es Entwicklungsumgebungen, wie z.B. Microsoft Visual Studio unter Windows (für C++), in welchen der Quelltext geschrieben wird und welche das kompilieren und linken übernehmen.
Erste Schritte
Eine einfache Konsolenanwendung, die "Hallo Welt!" ausgibt:
#include <iostream> int main() { std::cout << "Hallo Welt!\n"; }
bzw.:
#include <stdio.h> //C #include <cstdio.h> //C++ int main() { printf("Hallo Welt!\n"); }
Eine Konsolenanwendung, die einen Integer einliest und dessen Quadratzahl berechnet:
#include <iostream> int main() { int a; std::cin >> a; std::cout << (a*a) << endl; }
bzw.:
#include <stdio.h> //C #include <cstdio.h> //C++ int main() { int a; scanf("%d",&a); printf("%d",(a*a)); }
Eine Funktion erstellen
Das Programm soll wie im vorangegangenen Beispiel die Quadratzahl einer eingelesenen Zahl ausgeben:
#include <iostream> int sq(int n) { return a*a; } int main() { int a; std::cin >> a; std::cout << sq(a) << endl; }
sq ist hierbei eine Funktion, welche als Parameter einen Integer entgegen nimmt und einen Integer zurückgibt. main ist auch eine Funktion. Allerdings nimmt sie keinen Parameter entgegen und gibt einen Integer zurück. Bei der Funktion main gibt dieser Rückgabewert Auskunft darüber, ob das Programm korrekt beendet wurde, eine 0 oder gar kein Rückgaewert stehen für eine erfolgreiche Beendigung, alles Andere für eine nicht erfolgreiche Beendigung.
Klassen und Vererbung
(nur C++)
Eine Klasse repräsentiert ein Objekt, sie ist quasi eine Schablone für diese Art Objekt. Beispiel:
class Apfel{ };
Eine Klasse, die einen Apfel darstellt.
Um nun einen neuen Apfel zu erhalten ruft man einen Konstruktor auf, welcher das Erstellen eines neuen Apfels übernimmt:
Apfel A(); Apfel B = Apfel();
Eigene Konstruktoren definieren
Sei die Klasse Apfel nun etwas komplexer:
class Apfel { public: std::string Name; int Gewicht; };
Um den Äpfeln A und B nun einen Namen oder ein Gewicht zuzuweisen schreibt man:
A.Name = "Apfel A"; B.Gewicht = 100;
Da dies mitunter lästig sein kann, bietet C++ die Möglichkeit eigene Konstruktoren zu definieren und so z.B. beim Erstellen eines neuen Apfels diesem gleich einen Namen und ein Gewicht zuzuweisen:
class Apfel { public: std::string Name; int Gewicht; Apfel(); // Der Standard-Konstruktor Apfel(std::string name,int gewicht); // Deklaration eines eigenen Konstruktors. }; Apfel::Apfel(std::string name,int gewicht) //Definition des eigenen Konstruktors. { this->Name = name; this->Gewicht = gewicht; }
Apfel A = Apfel("Apfel A",100); Apfel B("Apfel B",50);
Vererbung
C++ erlaubt es, dass Klassen voneinander Erben:
class A { ... }; class B : public A { ... };
In diesem Fall übernimmt B alle öffentlichen Felder von A:
class A { public: int a; }; class B : public A { }; ... B b; b.a = 42;
Literatur
- Brian W. Kernighan, Dennis Ritchie: Programmieren in C Hanser Fachbuch, 2. Auflage, 1990, ISBN 3-446-15497-3.
- Bjarne Stroustrup: Die C++-Programmiersprache. 4. Auflage. Addison-Wesley, 2009, ISBN 978-3-8273-2823-6 (Das Standardwerk)