C++ vs. Java Hello world!

Werbung
C++ vs. Java
Hello world!
• Java
class HelloWorld {
static public void main(String args) {
System.out.println("Hello World!");
}
}
• C
#include <stdio.h>
main() {
printf("Hello World!\n");
}
• C++
#include <iostream>
using namespace std;
int main() {
cout << "Hello World!" << endl;
}
© 2007 AG Rechnernetze
1-overview.1
C++ vs. Java
Grundlegendes
C++
Java
Compiler/Inter preter
C++-Programme werden nach
Übersetzung nach Bytecode;
Maschinencode übersetzt
Inter pretation durch Virtual Machine
Standardisierung
ISO-Standard;
ISO-Standardisierung abgebrochen
verabschiedet Juli 1998
C
C ist Teilmenge von C++
Präprozessor
#define → Makros
#ifdef
→ bedingte Übersetzung
(nicht vorhanden)
#include → Expor t/Impor t-Relation
zwischen Modulen
© 2007 AG Rechnernetze
1-overview.2
C++ vs. Java
Datentypen
Grunddatentypen
bool, char, int, short int, long int, float,
boolean, char, byte, shor t, int, long,
double, long double
float, double
Vorzeichenlos, vorzeichenbehaftet
unsigned char, signed char, unsigned
int, unsigned short int, unsigned long int
Typ-Größen
Implementierungsspezifisch
Durch Sprache fest vorgegeben
(in festen Grenzen)
Zeichentyp
char = 8 Bit (ISO-8895-1); wchar_t
char = 16 Bit (Unicode)
Bool-Typ
bool kompatibel mit int-Typen
boolean
Enumerationstypen
enum color {red, blue, green};
© 2007 AG Rechnernetze
1-overview.3
C++ vs. Java
Pointer und References
Pointer
int *p, i; p = &i; *p = 3;
C++-Pointer vs. Java-References
Explizite Pointer:
Implizite Referenzen für Arrays und Objekte:
Car *mycar;
Car mycar ;
mycar = new Car("Saab 900"); mycar = new Car("Saab 900");
Zuweisen by reference
Vector *a, *b; //...
Vector a, b; //...
a = b;
a = b;
Zuweisen by value
Vector *a, *b, c, d; //...
Vector a, b; //...
*a = *b; c = d;
a = b.clone();
Pointer-Arithmetik
p++; p −= i; p−q;
Referenz-Typ
int i, &r = i; r = 3;
© 2007 AG Rechnernetze
1-overview.4
C++ vs. Java
Pointer und References, Variablen, Arrays
Objektzugriff über Pointer
Coordinate c;
(Zugriff immer by reference:
c−>x = 0; c−>y = −1;
c.x = 0; c.y = 0;)
Speicher verwaltung
Explizite Freigabe von Objekten
Automatische Freigabe durch
durch delete-Operator
Garbage Collection
Uninitialisier te Variablen
Erlaubt (außer const, reference)
Nicht erlaubt bzw. automatische
Initialisierung
Globale Variablen
Ja
Nein (Variablen nur in Klassen)
Array-Typ
Arrays;
Arrays
enge Relation mit Pointern
Bounds-Checking
Nein
Ja
© 2007 AG Rechnernetze
1-overview.5
C++ vs. Java
Funktionen, Argument-Übergabe
Funktionen außerhalb von
Klassen erlaubt: z. B. main()
Funktionen
Nur Methoden
Argument-Übergabe
by-value
by-value (primitive Typen und Objekt-Referenzen)
Argument-Übergabe by-reference
Über Pointer oder Referenzen:
void swap(int *a, int *b);
Nicht direkt möglich
void swap(int &b, int &b);
Default-Argumente
void print(int n, int base = 10);
Unspezifizier te Argumentanzahl
int execl(char* ...);
Inline-Funktionen
inline int max(int a, int b);
(Automatisch)
© 2007 AG Rechnernetze
1-overview.6
C++ vs. Java
Ausdrücke, Statements
Null-Pointer/Referenz
Integer-Wer t 0 oder „NULL-Symbol“
null-Schlüsselwor t
Strings
Null-terminierte char-Arrays
Klassen String, Stringbuffer
Standardlibrary: String-Klasse
Überladene Operatoren
Ja
Nein (nur Methoden)
Boolean Expressions in Statements
bool kompatibel mit Ganzzahl/Pointer : Ausdruck muß boolean liefern:
int i = 5;
int i = 5;
while (i−−) {...
while (i−− != 0) {...
goto, break, continue
goto label;
(kein goto)
break;
break [label];
continue;
continue [label];
© 2007 AG Rechnernetze
1-overview.7
C++ vs. Java
Datenabstraktion
typedef
typedef int offset_t;
Weitere Typ-Konstrukte
struct, bitfields, union
Funktionen als Objekte
Funktions-Pointer
(Nur über Klassen möglich)
Zugriff auf Instanz-Variablen
private/protected/public
private/protected/public
(auch bei Inheritance angeben)
Default: Zugriff für Package
friend-Funktionen, friend-Klassen
Generizität/Typ-Parameter
Template-Klassen
Template-Funktionen
© 2007 AG Rechnernetze
1-overview.8
C++ vs. Java
Vererbung, Dynamisches Binden, Threads
Vir tuelle Funktionen/Methoden
vir tual-Keyword
Per default (Ausschalten mit final)
Vir tuelle Funktionen ohne Implementierung
vir tual int f() = 0;
abstract int f();
Objekt-Finalisierung
Destruktoren
finalize-Methode (aber expliziter
Aufruf für Superklasse nötig)
Multiple Inheritance
class DrawableCircle:
class DrawableCircle
public Circle,
extends Circle
public Drawable { ...
implements Drawable { ...
Threads/Nebenläufigkeit
Threads-Libraries
In Sprache integrier t
© 2007 AG Rechnernetze
1-overview.9
Herunterladen