我有一個類似矩陣的類。 所以用例是一樣的東西:矩陣類的深層副本
Matrix matrix(10,10);
matrix[0][0]=4;
//set the values for the rest of the matrix
cout<<matrix[1][2]<<endl;
代碼:
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <sstream>
using namespace std;
class Matrix {
public:
Matrix(int x, int y);
class Proxy {
public:
Proxy(int* _array) : _array(_array) {
}
int &operator[](int index) const {
return _array[index];
}
private:
int* _array;
};
Proxy operator[](int index) const {
return Proxy(_arrayofarrays[index]);
}
Proxy operator[](int index) {
return Proxy(_arrayofarrays[index]);
}
const Matrix& operator=(const Matrix& othersales);
private:
int** _arrayofarrays;
int x, y;
};
Matrix::Matrix(int x, int y) {
_arrayofarrays = new int*[x];
for (int i = 0; i < x; ++i)
_arrayofarrays[i] = new int[y];
}
const Matrix& Matrix::operator=(const Matrix& othermatrix) {
new (this) Matrix(x, y);
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
_arrayofarrays[i][j] = othermatrix._arrayofarrays[i][j];
return *this;
}
int main() {
Matrix a(2, 3);
a[0][0] = 1;
a[0][1] = 2;
a[0][2] = 3;
a[1][0] = 4;
a[1][1] = 5;
a[1][2] = 6;
cout << a[1][2] << endl;
//prints out 6
const Matrix b = a;
cout << b[1][2] << endl;
a[1][2] = 3;
cout << a[1][2] << endl;
// prints out 3
cout << b[1][2] << endl;
// prints out 3 as well
}
通過調用const Matrix b = a;
我想創建一個矩陣的新實例,將具有相同的值a
在那一刻。儘管如此,b
正在通過更改a
中的值而受到影響。所以,如果我在a
中更改某個值,那麼它也會在b
中更改。我不希望它的行爲如此。
所以我需要創建一個b
的副本,它不會受到a
本身的影響。
這些可能是愚蠢的問題,但對我來說,作爲一個Java的傢伙和C++新手都是那些東西真的很混亂,所以感謝任何有益的建議......
再次檢查[您最後一個問題的答案](http://stackoverflow.com/a/15753838/16287)。對於const對象,您需要'operator [](int index)'對於非const對象***和***'operator [](int index)const'。你只有一個。 –
你不能聲明一個對象爲常量 –
@DrewDormann你是對的,我忘了實現這一點。我將編輯我的帖子。儘管如此,價值仍受到原始對象變化的影響。 – Dworza