۱) تابع operator*
باید طبق تعریف یه ماتریس برگردونه که شما در تعریف تابع هیچی برنمیگردونین.
۲) هنگام اجرای عملگر *
در تابع main
یعنی خط زیر
operator*(&T, b);
احتمالاً منظورتون چیزی شبیه زیر بوده. کلمهی operator
در اجرا نمیآد
T = T*b;
لازم نیست آدرس T
رو به صورت &T
استفاده کنین.
۳) لازم نیست مخربها رو به صورت دستی فراخوانی کنین. دو خط زیر اضافه است
T.~matrix();
b.~matrix();
۴) ماتریس T
با تابع initialize()
مقداردهی نشده.
۵) تابع accept
رو هیچ جا فراخوانی نکردین.
به هر حال فکر کنم برنامهی تغییر یافتهی زیر تا حدی مشکل شما رو رفع کنه
#include "iostream.h"
class matrix
{
int **p,m, n;
public:
matrix(int row,int col)
{
m=row;
n=col;
p = new int*[m];
for (int i=0; i<m; i++)
p[i] = new int[n];
}
~matrix()
{
for (int i=0; i<m; i++)
delete p[i];
delete p;
}
void initialize()
{
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
p[i][j]=0;
}
}
}
void accept()
{
cout<<"Enter matrix elements:";
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
cin >> p[i][j];
}
}
}
void display()
{
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
cout << p[i][j] <<" ";
cout <<endl;
}
cout<<endl;
}
matrix operator= (matrix eq)
{
m = eq.m;
n = eq.n;
p = eq.p;
return *this;
}
friend void operator * (matrix &, matrix &);
};
void operator *(matrix &T , matrix &b)
{
for(int i=0; i<b.n; i++)
{
for(int j=0; j<b.n; j++)
T.p[i][j] =b.p[i][j];
for(int j=b.n; j<T.n; j++)
T.p[i][j] =2;
}
for(int i=b.n;i<T.m;i++)
for(int j=0;j<T.n;j++)
T.p[i][j]=1;
T.display();
}
int main()
{
matrix b(2,2);
b.initialize();
b.display();
matrix T(4,4);
T*b;
T.display();
return 0;
}
هیچ پژوهش انسانی نمیتواند ادعای علمی بودن داشته باشد، مگر اینکه از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)