Предположим, у меня есть класс Matrix, с конструктором следующим образом:Как правильно определить конструктор копирования
Matrix::Matrix(int rows, int cols)
{
nrows = a; //here nrows is the number of rows for each matrix
ncols = b; //here ncols is the number of cols for each matrix
p = new double [rows*cols];
for(int i=0;i<rows*cols;i++)
{
*p++ = 0.0;
}
}
Предположим, у меня тоже есть «копия» конструктор следующим образом:
Matrix::Matrix(const Matrix& mat)
{ p = new double[mat.nrows*mat.ncols];
for(int i=0;i<mat.nrows*mat.ncols;i++)
{
p[i] = mat.p[i];
}
}
сейчас также предположим, у меня есть следующие строки в моей главной функции:
int main()
{
Matrix A(2,2);
Matrix B(2,2);
A = Matrix(B); //call overloaded assignment operator, and copy ctor/
}
Здесь оператор «=» перегружен присвоить все-ю e элементов в B до A. Моя проблема заключается в том, что после вызова конструктора копирования объект Matrix A является совершенно новым объектом.
Есть ли лучший способ написать конструктор копирования, чтобы, если матрица A уже существует, то вызов A = матрицы (B) приводит к ошибке?
Почему вы этого не сделали? – NathanOliver
Что вы подразумеваете под «Матрицей Объект - совершенно новый объект»? – Pradhan
Вы не можете назначить объект, который еще не существует. Если вы хотите отклонить задание, спросите об этом. (Помните, что 'Matrix A = B;' не является назначением, а инициализацией.) – molbdnilo