Ich habe eine Klasse A, die einige Instanzvariablen enthält, und eine Klasse B, die einen Verweis auf der Klasse nimmt und die Instanzvariablen ändert. Nachdem Klasse B diese Variablen geändert hat, würden Sie denken, dass diese in der ursprünglichen Instanz der Klasse geändert würden, in diesem Fall jedoch nicht. Warum passiert das und wie kann ich das beheben?C++ das Ändern einer Klasse, die als Referenz übergeben wird, ändert das ursprüngliche Objekt nicht
class Foo {
public:
int x;
int y;
Foo() {
}
Foo(int x, int y) {
this->x = x;
this->y = y;
}
};
class Bar {
public:
Foo foo;
Bar() {
}
Bar(Foo& foo) {
this->foo = foo;
}
void Swap() {
int tmp = foo.x;
foo.x = foo.y;
foo.y = tmp;
}
};
int main()
{
Foo foo(4, 8);
Bar bar(foo);
std::cout << "this is x: " << foo.x << std::endl; //prints 4
std::cout << "this is y: " << foo.y << std::endl; //prints 8
bar.Swap();
std::cout << "this is x: " << foo.x << std::endl; //prints 4, but should print 8
std::cout << "this is y: " << foo.y << std::endl; //prints 8, but should print 4
}
Willkommen bei Stack Overflow. Bitte nehmen Sie sich die Zeit, [The Tour] (http://stackoverflow.com/tour) zu lesen und beziehen Sie sich auf das Material aus der [Hilfe] (http://stackoverflow.com/help/asking), was und wie Sie können fragen Sie hier. –
Das richtige Werkzeug, um solche Probleme zu lösen, ist Ihr Debugger. Sie sollten Schritt für Schritt durch Ihren Code * gehen, bevor Sie auf Stack Overflow nachfragen. Für weitere Hilfe lesen Sie bitte [Wie kleine Programme zu debuggen (von Eric Lippert)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Zumindest sollten Sie Ihre Frage so bearbeiten, dass sie ein [minimales, vollständiges und überprüfbares] (http://stackoverflow.com/help/mcve) Beispiel enthält, das Ihr Problem zusammen mit den Beobachtungen, die Sie im Debugger gemacht haben, reproduziert . –
'Bar' enthält eine Kopie der Quelle' Foo', keine Referenz auf die Quelle 'Foo'. Das 'Foo' wurde durch Verweis in die Funktion übernommen, wurde dann aber kopiert. – user4581301