Ich bin etwas neu in C++ also, ich denke, das ist eine sehr grundlegende Frage.Überladen = Operator in C++, wenn Arrays von Werten zu kopieren sind
Angenommen, ich habe diese Klasse:
// file Graph.h
class Graph {
public:
Graph(int N); // contructor
~Graph(); // destructor
Graph& operator=(Graph other);
private:
int * M;
int N;
};
// file Graph.cpp
Graph :: Graph(int size) {
M = new int [size];
N = size;
}
Graph :: ~Graph() {
delete [] M;
}
Ich möchte einen Zuweisungsoperator erstellen, die der Inhalt von Array kopiert M [] aber , es nicht zu überschreiben, wenn ich es nach der Kopie ändern (Ich denke, das wird erreicht, indem man den eigentlichen Zeiger nicht kopiert, sondern nur den Inhalt, weiß nicht, ob ich recht habe). Das habe ich ausprobiert:
Graph& Graph::operator=(Graph other) {
int i;
N = other.N;
M = new int [N];
for (i = 0; i < N; i++)
M[i] = other.M[i];
return *this;
}
Ist das korrekt? Gibt es andere Möglichkeiten, dies zu tun?
edit: Eine wichtige Frage, die ich vergessen habe. Warum muss ich es wie Graph& operator=(Graph other);
deklarieren und nicht nur: Graph operator=(Graph other);
was ist in meinem Buch (C++: The Complete Reference, 2. Auflage, Herbert Schildt, Seiten 355-357) geschrieben?
Vielleicht finden Sie [diese FAQ] (http://stackoverflow.com/questions/4172722/) interessant. Wenn Sie 'int *' durch 'std :: vector' ersetzen, ersparen Sie sich eine Welt der Schmerzen. –
fredoverflow