Code: Alles auswählen
#include <iostream>
using namespace std;
struct pkw{
int leistung;
pkw(){
leistung = 60;
}
void tunen(){
leistung += 20;
}
};
void test(pkw a){
a.tunen();
}
int main(){
pkw pkw1;
cout << pkw1.leistung << endl;
pkw1.tunen();
cout << pkw1.leistung << endl;
}
60
80
Und zwar übergebe ich der Test-Funktion ein PKW-Objekt. Dabei müsste ja (nach dem CallByValue-Prinzip) eine Kopie dieses PKW-Objektes angelegt werden mit dem die Funktion dann anschließend arbeitet. In der Funktion wird dann die Leistung des PKW's getuned. Allerdings wurde dabei auch die Leistung des ursprünlichen PKWs den ich als Paramerer übergeben habe erhöht. Widerspricht das nicht dem CallByValue-Prinzip?
Scheinbar wurde doch nur die Referenz auf das Objekt kopiert und letztendlich zeigen beide Variablen auf den selben PKW. So kenne ich das auch aus Java, wo implizit die Referenz auf das Objekt kopiert wird. Ich dachte allerdings, dass Referenzen auf Objekte in C++ explizit mittels * deklariert werden und dann mittels (->)-Operanden auf die Member zugreifen. Da ich in der test-Funktion mit dem (.)-Operanden arbeite müsste es sich doch direkt um das Objekt selbst handeln und nicht um eine Referenz, oder?
Was habe ich da falsch verstanden?
mfg Lars