Crash course i C++

Emne

Java

C++

Bemærkninger

Parametre i metodeerklæringer

f( C x )

f( C* x ) eller f( C& x )

Objekter repræsenteres som pointer/reference. I java implicit, i C++ eksplicit (med & for reference og * for pointer).

Metodekald på objekter

x.m();

x->m(); eller x.m();


Keyword const



f( const C& x)

Keyword const angiver at metoden ikke ændrer ved parametren x.

Keyword const


class C {

m() const;

}

Keyword const angiver at metoden ikke ændrer ved objektets tilstand (fx en get-metode)

Polymorfisk nedarvning


virtual

Keyword virtual tillader at metoder kan benyttes polymorfisk ligesom i normal java.

Metodeerklæring

class X {

void f() {?}

}

erklæring:

vitual m();

implementering:

void X::m(){?}

Metodeerklæringen er delt i to: en erklæring og en implementering (<klasse>::<metodenavn>).

Typen af strenge

String

const char*


Sammenligning af strenge

s1.equals(s2);

strcomp( s1, s2);

<string>.equals(<string>) returnerer true|false. strcomp returnerer et heltal (<0, >0, =0).

Nedarvning

class X extends Y implements I

class X: public Y, public I


Templates

Vector v;

Shape s = (Shape)v.elementAt(3);

Vector<Shape*> v;

Shape s = v.elementAt(3);

Vector<X> er en template, hvor typen er parametriserbar. C++ vektoren kan indeholde objekter af klassen X eller subklasser af X.

Interface-erklæringer

Interface I {

void m();

}

class I {

public:

virtual void m() = 0;

}

Der findes ikke interfaces i C++ så man bruger i stedet en abstrakt klasse med udelukkende abstrakte metoder.

Tilgængelighed

int d; // default

public int pu;

privat int pr;

int d; // default

public:

int pu;

private:

int pr;


Hukommelseshåndtering

Garbage Collection

delete s;


Typecasting

Circle c = (Circle) s;

Circle c = dynamic_cast<Circle*> (s);