Chào mọi người, em đang học về OOP, code về phần nạp chồng toán tử thì gặp lỗi
Em có thử viết hàm nhân ma trận thì chương trình chạy đúng, nhưng khi em dùng toán tử * đã nạp chồng thì chương trình không chạy được, cho em hỏi em đã mắc lỗi gì vậy ạ? em mới biết chút ít về phần này thôi ạ, em cảm ơn.
Hàm nhân ma trận em cop nguyên của phần nạp chồng qua, nên em nghĩ là sai ở kiểu trả về hoặc cú pháp nạp chồng của em chưa đúng, em lên stackoverflow tìm thì cũng có topic giống của em nhưng topic đấy cũng không ai cung cấp solution
Code:
#include<iostream>
using namespace std;
template <class T>
class Array2D {
private:
int r;
int c;
T** arr;
public:
// TODO
Array2D(int r, int c)
{
this->r = r;
this->c = c;
arr = new T* [r];
for (int i = 0; i < r; ++i)
{
arr[i] = new T[c];
}
}
Array2D(int r, int c, T init)
{
this->r = r;
this->c = c;
arr = new T * [r];
for (int i = 0; i < r; ++i)
{
arr[i] = new T[c];
}
for (int i = 0; i < r; ++i)
{
for (int j = 0; j < c; ++j)
{
arr[i][j] = init;
}
}
}
~Array2D()
{
this->r = r;
this->c = c;
for (int i = 0; i < this->r; ++i)
{
delete[] arr[i];
}
delete[] arr;
}
Array2D<T>* nhanmatran(Array2D<T>* a)
{
if (this->c != a->r)
{
return NULL;
}
else
{
Array2D<T>* matrix = new Array2D<T>(this->r, a->c, 0);
for (int i = 0; i < this->r; ++i)
{
for (int j = 0; j < a->c; ++j)
{
for (int idx = 0; idx < this->c; ++idx)
{
matrix->arr[i][j] += this->arr[i][idx] * a->arr[idx][j];
}
}
}
return matrix;
}
}
Array2D<T>* operator*(Array2D<T> *a)
{
if (this->c != a->r)
{
return NULL;
}
else
{
Array2D<T>* matrix = new Array2D<T>(this->r, a->c,0);
for (int i = 0; i < this->r; ++i)
{
for (int j = 0; j < a->c; ++j)
{
for (int idx = 0; idx < this->c; ++idx)
{
matrix->arr[i][j] += this->arr[i][idx] * a->arr[idx][j];
}
}
}
return matrix;
}
}
int getR() { return this->r; }
int getC() { return this->c; }
void disp() {
for (int i = 0; i < this->r; i++) {
for (int j = 0; j < this->c; j++) {
cout << arr[i][j] << " ";
}
cout << endl;
}
}
};
int main() {
Array2D<int>* p = new Array2D<int>(3,4,5);
Array2D<int>* p1 = new Array2D<int>(4, 3, 6);
Array2D<int> *matrix=p*p1;
matrix->disp();
//cout << (*p)[0][1] << endl;
return 0;
}