注册 登录
编程论坛 C++教室

帮忙看下哪里错了

心手2012 发布于 2012-05-02 11:46, 300 次点击
程序代码:
#include<iostream.h>

class MAT
{
    float **p;
    int row;
    int cloum;
public:
    MAT(){}
    MAT(int r,int c)
    {                       
        row=r;
        cloum=c;
        p=new float *[row];
        for(int i=0;i<row;i++)
        {
            p[i]=new float [cloum];
        }
    }
    void getdata();
    void display();
    void operator-();
    friend MAT operator+(MAT,MAT);  
    friend MAT operator*(int ,MAT &);
};
void MAT::getdata()
{
    for(int i=0;i<row;i++)
        for(int j=0;j<cloum;j++)
            cin>>*((*p+i)+j);
}
void MAT::display()
{
    for(int i=0;i<row;i++)
    {
        for(int j=0;j<cloum;j++)
            cout<<*((*p+i)+j)<<" ";
        cout<<endl;
    }
    cout<<endl;
}
MAT operator+(MAT s1,MAT s2)
{
    MAT k(s1.row,s1.cloum);
    for(int i=0;i<k.row;i++)
    {
        for(int j=0;j<k.cloum;j++)
            k.p[i][j]=s1.p[i][j]+s2.p[i][j];
    }
    return(k);
}
void MAT:: operator-()
{
    for(int i=0;i<row;i++)
    {
        for(int j=0;j<cloum;j++)
            p[i][j]=-p[i][j];
    }
}
MAT operator*(int a,MAT & s)
{
    MAT k(s.row,s.cloum);
    for(int i=0;i<k.row;i++)
    {
        for(int j=0;j<k.cloum;j++)
            k.p[i][j]=a*s.p[i][j];
    }
    return(k);
}
int main()
{
    const int n=3;
    MAT t1(n,n),t2(n,n);
    cout<<"enter two "<<n<<"*"<<n<<" arrays:\n";
    t1.getdata();
    t2.getdata();

    MAT t3,t4;
    -t2;
    t3=t1+t2;   
    t4=2*t1;
    t2.display();
    t3.display();
    t4.display ();
    return 0;
}
就是运行的时候打印出来的有类似地址值的东西
3 回复
#2
lucky5635912012-05-02 12:47
哪有?我运行怎么没有发现?
#3
tongzhipeng2012-05-02 15:02
二极指针写错了
*((*p+i)+j)应该写成 *(*(p+i)+j)
这个确实容易搞错,所以我总是尽量写成p[i][j]; 因为我也经常在这上面犯错,所以我看到代码第一件事就是把你的代码里面的二级指针改成p[i][j],
结果一下被我命中,
#4
心手20122012-05-02 18:25
回复 3楼 tongzhipeng
嗯  是你说的问题,我下次要注意了。谢谢!
1