Ich versuche zu verstehen, wie Referenzen in C++ arbeiten, also habe ich ein paar Dateien mit zwei verschiedenen Objekten erstellt. Einer ist ein Tier und ein anderer ist ein Tierpfleger. Mein Ziel ist es, eine Referenz eines Tieres an einen Tierpfleger weiterzuleiten und den Zoowärter den Namen des Tieres ändern zu lassen und sich trotzdem im ursprünglichen Tierobjekt wiederzufinden. Wie wird dies mit Referenzen gemacht? Hier sind die Dateien, die ich benutze.Wie übergebe ich eine Referenz von einem Objekt an ein anderes und modifiziere dieses erste Objekt noch?
Source.cpp
#include <iostream>
#include <string>
#include "Animal.h"
#include "zookeeper.h"
using namespace std;
int main() {
Animal animal;
Animal& animalRef = animal;
printf("animal's name before it is assigned to a zookeeper: %s\n", animal.getName());
Zookeeper aZookeeper = Zookeeper(animalRef);
aZookeeper.changeMyAnimalsName("Fred");
printf("animal's name after it is assigned to a zookeeper: %s\n", animal.getName());
//Keep cmd window open
int j;
cin >> j;
return 0;
}
Animal.h
#pragma once
#include <string>
using namespace std;
class Animal {
string name = "";
int height = 0;
public:
string getName() { return name; }
int getHeight() { return height; }
void setName(string n) { name = n; }
void setHeight(int h) { height = h; }
};
zookeeper.cpp
#include "zookeeper.h"
using namespace std;
Zookeeper::Zookeeper(Animal& a) {
_myAnimal = a;
}
void Zookeeper::changeMyAnimalsName(string newName) {
_myAnimal.setName(newName);
}
zookeeper.h
#pragma once
#include "Animal.h"
class Zookeeper {
Animal _myAnimal;
public:
Zookeeper(Animal& a);
void changeMyAnimalsName(std::string newName);
};
Referenzen hav Es hat nichts mit Dateien zu tun, also wenn Sie untersuchen wollen, wie sie funktionieren, legen Sie all Ihren Code in eine Datei. –
Sie erstellen eine Kopie, wenn Sie '_myAnimal = a;' im 'Zookeeper'-Konstruktor ausführen, da' _myAnimal' keine Referenz ist. – Barmar
'Animal & _myAnimal;' (beachten Sie das kaufmännische Und) und 'Zookeeper :: Zookeeper (Tier & a): _myAnimal (a) {}' –