Hallo I.,
danke für Eure bisherigen Antworten.
Also während bei „klassischem“ C der Quelltext in Module,
einzelne Quelltextdateien, unterteilt werden kann, so daß eine
Funktion nur das „sieht“, was in im gleichen Modul steht oder
global deklariert und mittels Headerdateien zugänglich gemacht
wurde - ist die OOP also eine Art von Ausweitung dieses
Prinzips: die Funktion „sieht“ nur das, was in der gleichen
Klasse steht oder mittels Vererbung zugänglich gemacht wurde.
Also:
Du denkst immer noch prozedural und nicht OO 
OO geht im Prinzip von den Variablen aus, welche halt etwas komplexer sind und Objekte genant werden.
Also etwas vereinfacht:
Du deklarierst eine „int“ Variable.
Bei OOP sind nun automatisch alle Operationen welche für dieses Objekt definiert sind mit dieser Variablen verbunden (also in diesem Beispiel „-+/*%“ aber auch Funktionen wie atoi() oder itoa() ).
Du kannst dann statt:
short i;
char *s;
…
i = atoi(s);
einfach:
i = s;
schreiben. Da atoi() im Objekt hinterlegt ist, kann der Compiler aus den unterschiedlichen Typen automatisch erkennen, welche Funktion zur Konvertierung aufgerufen werden muss.
OK, bei einem int macht das noch keine Vorteile, aber wenn du ein kompliziertes struct hast …
Hinzu kommt, dass man auch die einfachen Operatoren wie z.B. „+“ überladen kann, also als Name für eine eigene Funktion verwenden kann.
Dann geht auch statt
s = strcat(s1,s2);
auch
s = s1 + s2;
Nehmen wir mal die „gebräuchlichen“ imaginären Zahlen als kleines Beispiel:
typedef struct
{
float real;
float imag;
} imaginär;
Da dieses struct öffentlich zugänglich sein muss, kannst du nicht verhindern, dass ein Programmierer an den beiden Elementen selber rumpfuscht. In OO kannst du die ganze Geschichte kapseln, sodass keiner mehr an real und imag rumpfuschen kann, obwohl jeder ein Object des Typs „imaginär“ erzeugen kann. Zudem ist dann auch im Object abgelegt wie es z.B. ausgedruckt wird.
Somit kannst du jederzeit die Deklaration von float in double ändern. Oder du baust das ganze komplett um und verwendest eine eigene Exponential-Darstellung:
typedef struct
{
long long mantisse;
long long exponent;
} myfloat
typedef struct
{
myfloat real;
myfloat imag;
} imaginär;
Für den Anwender des Objekts ist nicht sichbar wie „imaginär“ intern aufgebaut ist.
OK, soweit die Theorie, in der Praxis kann man alle Konzepte misbrauchen !!!
Nur weil eine Sprache ein „goto“ kennt, muss man es ja nicht verwenden.
MfG Peter(TOO)