C / C++: Unterschied zwischen den Versionen

Aus QED-WIKI - Ein Berliner Mathe-WIKI von und für Schülerinnen und Schüler
Wechseln zu: Navigation, Suche
K
(zum-wiki:)
 
(10 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Auf dieser Seite wird grundlegendes zu den Programmiersprachen C, vorallem aber zu C++ erscheinen.
+
{{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 dabei auf nahezu allen Plattformen existent, es gibt unzählige in C bzw. C++ geschriebene Anwendungen und Funktionsbibliotheken.
+
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 15: Zeile 20:
 
Compiler als auch Linker werden durch die Kommandozeile aufgerufen.
 
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. [http://www.microsoft.com/visualstudio/deu/downloads Microsoft Visual Studio] unter Windows, in welchen der Quelltext geschrieben wird und welche das kompilieren und linken übernehmen.
+
Da diese Art des Kompilierens von C/C++ mitunter sehr Nerven- und Zeitaufwändig sein kann, gibt es Entwicklungsumgebungen, wie z.B. [http://www.microsoft.com/visualstudio/deu/downloads Microsoft Visual Studio] unter Windows (für C++), in welchen der Quelltext geschrieben wird und welche das kompilieren und linken übernehmen.
  
 
== Erste Schritte ==
 
== Erste Schritte ==
Eine einfache Konsolenanwendung, die "Hello Welt!" ausgibt:
+
Eine einfache Konsolenanwendung, die "Hallo Welt!" ausgibt:
  
 
  #include <iostream>
 
  #include <iostream>
 
  int main()  
 
  int main()  
 
  {
 
  {
     std::cout << "Hello Welt!\n";
+
     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:
+
Eine Konsolenanwendung, die einen [[int|Integer]] einliest und dessen Quadratzahl berechnet:
  
 
  #include <iostream>
 
  #include <iostream>
Zeile 35: Zeile 47:
 
     std::cout << (a*a) << endl;
 
     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 Methode erstellen ==
+
== 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 50: 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 ==
 +
* 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)
 +
 +
 +
 +
[[zum-wiki:C]]

Aktuelle Version vom 16. Februar 2015, 19:59 Uhr

Icon falscher Titel.svg 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)