Я немного новичок в C ++, так что, я думаю, это очень простой вопрос.
Предположим, у меня есть этот класс:
// 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;
}
Я хочу создать оператор присваивания, который будет копировать содержимое массива M [], но , чтобы не перезаписывать его , когда я изменяю его после копирования (я думаю, это выполнено не копируя фактический указатель, а только содержимое, не знаю, прав ли я). Вот что я пробовал:
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;
}
Это правильно? Есть ли другие способы сделать это?
редактировать: важный вопрос, который я забыл. Почему я должен объявить это как Graph& operator=(Graph other);
, а не просто: Graph operator=(Graph other);
, что написано в моей книге (C ++: Полная ссылка, 2-е изд, Герберт Шильдт, стр. 355-357)?