#include <iostream>
void funcValue(int x, int val) {
x = val;
}
int main() {
int v = 3;
funcValue(v, 4);
std::cout << v << std::endl;
}
#include <iostream>
void funcReference(int& x, int val) {
x = val;
}
int main() {
int v = 3;
funcReference(v, 4);
std::cout << v << std::endl;
}
#include <iostream>
void funcPointer(int* x, int val) {
*x = val;
}
int main() {
int v = 3;
funcPointer(&v, 4);
std::cout << v << std::endl;
}
Referenzen können nichtNULL sein, Pointer schon
Referenzen können wie normale Variablen verwendet werden
Bei Referenzen und Pointern wird nur die Adresse übergeben, sonst wird kopiert
const Schlüsselwort
Für Konstanten
const int ANSWER_TO_EVERYTHING = 42;
Für Pointer
Pointer auf Konstante:
const int * some_pointer;
Alternativ auch:
int const * some_pointer;
Konstanter Pointer auf Variable:
int * const SOME_POINTER;
Konstanter Pointer auf Konstante:
int const * const SOME_POINTER;
const bezieht sich immer auf den linken Nachbarn. Gibt es keinen, dann auf den rechten Nachbarn.
const Schlüsselwort
Für Funktionsparamter
void doSomething(const char * str)
{
[...]
}
Funktion garantiert dem Aufrufer, dass sie den Wert, auf den der Pointer zeigt, nicht ändern wird (kann).
Für Methoden
class SomeClass {
void doSomething() const;
};
Die Methode kann keine Membervariablen verändern.
const Schlüsselwort
...und was macht das?
int const * const doSomething(const int * const & parameter) const;
static Schlüsselwort
Statische Attribute und Methoden werden pro Klasse nur einmal angelegt,
statt wie sonst für jede Instanz.
Zugriff über Klassenname::funktion() bzw. Klassenname::variable
class Product
{
private:
static int count_;
public:
Product() { count_++; }
~Product() { count_--; }
static int getProductsCount() { return count_; }
};
int Product::count_ = 0;
int main()
{
std::cout << Product::getProductsCount() << std::endl;
Product p1;
std::cout << Product::getProductsCount() << std::endl;
}
Vererbung
class CD
{
private:
int capacity_;
string title_;
public:
CD(string title, int size)
: capacity_(size), title_(title) {}
int getCapacity() {
return capacity_;
}
void printTitle() {
cout << title_ << endl;
}
};
class MusicCD : public CD
{
private:
int tracks_;
public:
MusicCD(string name, int tracks)
: CD(name, 700), tracks_(tracks)
{}
int getCapacity() {
return tracks_;
}
void play() {
cout << "lalalala" << endl;
}
};