Nun du erstellst deine Klasseninstanz ja so:
Code:
Auto* A = new Auto();
A ist ein Pointer vom Typ Auto. Genauso wie
Code:
int * b = new int();
ein Pointer vom Typ int ist.
D.h. der Compiler weiß an der Stelle wenn du A verwendest: Heh das ist der Typ Auto.
Zu deiner Frage:
Ich gehe davon aus du hast in deiner Klasse Auto eine Methode namens "reifendruck" die ein Attribut der Klasse Aut namens "reifendruck" erhöht. (Btw. Bitte benenne Methoden danach was sie machen. Also z.B erhoeheReifendruck())
Nun machst du die Aufrufe:
Code:
Auto* auto1 = new Auto();
Auto* auto2 = new Auto();
auto1->reifendruck();
auto2->reifendruck();
Was passiert dabei im Hintergrund:
1. Du arbeitest jeweils auf einer eigenen Instanz der Klasse Auto. D.h. der Compiler hat beim Aufruf "Auto* auto1 = new Auto()" extra Speicherplatz für die Attribute der neuen Instanz der Klasse Auto reserviert. Deshalb muss man danach mit delete auch den Speicher wieder freigeben.
2. Wenn du nun aufrufst "auto1->reifendruck();" Weiß der Compiler zum einen: Das ist der Typ Auto, diese Klasse hat eine Methode "reifendruck". Zum anderen weiß der Compiler: Das ist die Instanz "auto1". Also muss ich die Methode reifendruck im Kontext der Daten von auto1 aufrufen.
Also eine kurze Zusammenfassung:
Wenn du zwei Instanzen erstellst und in Methoden der Klasse auf Instanzvariablen (Attribute) zugreifst, dann änderst du nur die Attribute der ausgewählten Instanz.
Wenn du Instanzübergreifend eine Variable haben willst (Wovon in 99,99% der Fälle abzuraten ist, und die Notwendigkeit einer solchen Variable auf eine schlechte Architektur schließen lässt) kannst du die Variable statisch als Klassenvariable anlegen. D.h. diese existiert innerhalb deines Programms nur einmal und alle Methoden die auf diese zugreifen Ändern diese eine Variable.
@Ceos Das ist nur indirekt eine Sache des Scopes meiner Ansicht nach 
Ein Sache des Scopes wäre eher sowas:
Code:
int main(void)
{
int a = 0;
{ //Scopes werden durch Klammern markiert (Auch die {} der int main(void) sind ein Scope)
a= 100;
int b = 10;
std::cout << b << std::endl;
std::cout << a << std::endl; //Funktioniert
} //Wir verlassen den Scope
std::cout << b << std::endl; //Gibt compiler fehler
}
Lesezeichen