Na gut machen wir es einfach:
Da unter C++ Klassen fast identisch wie Strukturen behandelt werden, kann man beides mit einem Beispiel erklären.
Stell dir vor, es gibt eine Basis, bsw. Mensch, dann wärest du die Instanz, oder du hast die Klasse Bild ... wenn du aber ein bestimmtes Bild vor dir hast, ist das die Instanz davon, mit seinen Pixeln (hat-Beziehung), seiner Breite u. Höhe (hat-Beziehung), usw.
Z.B. so:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
|
class Picture
{
unsigned char* m_data;
std::size_t m_width;
std::size_t m_height;
};
|
Bei einer Struktur hat aber (standardmäßig) jeder Zugriff (public) von außen auf die Daten, bei Klassen normal nur sie selbst (private), es sei denn du gibst es extra an.
In C++ ausgedrückt:
|
C-/C++-Quelltext
|
1
2
3
4
5
|
struct foo
{};
// ==
class foo
{ public: };
|
u.
|
C-/C++-Quelltext
|
1
2
3
4
5
|
struct foo
{ private: };
// ==
class foo
{};
|
...
Deswegen wird eine Struktur oft benutzt um Daten einfach zusammen zu fassen, was unter C sogar meist auch die Aufgabe davon war. (Es gab noch keine Klassen u. damit verbunden Konstruktoren usw.)
Unter C++ gibt es aber nun auch sowas wie Konstruktoren, Destruktoren, Memberfunktion, Vererbung usw. . Also nichtmehr nur eine einfache Ansammlung von Variablen. Dann wäre bsw. die Klasse da oben:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class Picture
{
unsigned char* m_data;
std::size_t m_width;
std::size_t m_height;
public:
Picture(const std::size_t width, const std::size_t height, const unsigned char* ptr_data)
: m_width(width), m_height(height), m_data(new unsigned char[width * height])
{ std::copy(ptr_data, ptr_data + height * width, m_data); }
~Picture()
{ delete [] m_data; }
};
|
... vllt. noch ein paar Funktionen dazu. usw.
Aber am besten suchst du dir mal nen Buch, dass dir den OO-Gedanken nahe bringt.
Ach mist die Erklärung war genauso scheiße