chào các bạn
mình có đoạn chương trình sau:
cấp phát động mảng 2 chiều, nhân 2 ma trận
#include <iostream>
using namespace std;
class matrix{
private:
int **array;
int h, c;
void allocated(){
array = new int *[h];
for (int i = 0; i < h; i++){
array[i] = new int[c];
}
}
public:
matrix(){
}
matrix(const matrix &a){
this->c = a.c;
this->h = a.h;
this->allocated();
int temp;
for (int i = 0; i < h; i++){
for (int j = 0; j < c; j++){
this->array[i][j] = a.array[i][j];
/*temp = a.array[i][j];
this->array[i][j] = temp;*/
}
}
}
~matrix(){
for (int i = 0; i < h; i++){
delete array[i];
}
delete array;
}
void input(){
cout << "So hang ";
cin >> h;
cout << "So cot ";
cin >> c;
allocated();
for (int i = 0; i < h; i++){
for (int j = 0; j < c; j++){
cout << "Nhap a[" << i << "][" << j << "] ";
cin >> array[i][j];
}
}
}
void output(){
for (int i = 0; i < h; i++){
for (int j = 0; j < c; j++){
cout << array[i][j] << " ";
}
cout << endl;
}
}
int getter_h(){
return h;
}
int getter_c(){
return c;
}
friend matrix operator*(matrix, matrix);
};
matrix operator*(matrix, matrix);
int main(){
matrix a, b;
a.input();
b.input();
cout << "Ma tran a da nhap" << endl;
a.output();
cout << "Ma tran b da nhap" << endl;
b.output();
if (a.getter_c() != b.getter_h()){
cout << "khong the nhan 2 ma tran" << endl;
}
else{
matrix c;
c = a * b;
cout << "Tich 2 ma tran" << endl;
c.output();
}
system("pause");
return 0;
}
matrix operator*(matrix a, matrix b){
matrix temp;
temp.h = a.h;
temp.c = b.c;
temp.allocated();
for (int i = 0; i < a.h; i++){
for (int j = 0; j < b.c; j++){
temp.array[i][j] = 0;
for (int k = 0; k < a.c; k++){
temp.array[i][j] += a.array[i][k] * b.array[k][j];
}
}
}
return temp;
}
class có dữ liệu là con trỏ, khi nạp chồng toán tử nhân 2 ma trận, hàm nạp chồng trả về 1 đối tượng , chương trình có hàm destructor để giải phóng con trỏ, nên khi biến tạm chứa kết quả nhân ma trận bị hủy (hàm nạp chồng toán tử chạy xong) thì đối tượng trả về sau khi nhân cũng bị hủy, (hủy cái *array) -> lỗi
nên mình đã định nghĩa lại copy constructor
như sau
matrix(const matrix &a){
this->c = a.c;
this->h = a.h;
this->allocated();
int temp;
for (int i = 0; i < h; i++){
for (int j = 0; j < c; j++){
this->array[i][j] = a.array[i][j];
/*temp = a.array[i][j];
this->array[i][j] = temp;*/
}
}
}
nhưng làm thế nào để lấy giá trị của phần tử [i][j] được biểu diễn bằng con trỏ **array nhỉ
kiểu như int *a, *b;
thì (sao b) = (sao a);
nhưng đây là con trỏ **a;
mình dùng 1 biến tạm để lấy giá trị rồi gán vào thì vẫn k được
temp = a.array[i][j];
this->array[i][j] = temp;