私は多少C++に新しいので、これは非常に基本的な質問です。オーバーロード=コピーされる値の配列がある場合の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++:The Complete Reference、2版、Herbert Schildt、355-357ページ)に書かれている内容だけではありませんか?
を助けたホープ「....(私は= int型のために」> - あなたは「i」の関数の先頭で宣言することにより、Cの構文を使用する必要がドントFAQ](http://stackoverflow.com/questions/4172722/)に興味があります。 'int *'を 'std :: vector'に置き換えれば、苦痛の世界を節約できます。 –
fredoverflow