перегрузка операторов ввода/вывода

 
0
 
C++
ava
Valya111 | 25.09.2013, 21:37
Помогите с перегрузкой операторов ввода и вывода. Ошибок при компилировании не выдает, но ввести матрицу не удается.





#include "stdafx.h"
#include "iostream"

using namespace std;

class Matrix
{      int n,m;  //размеры матрицы
      int **a;     
  public:
     Matrix()
     {  n=0;
        m=0;
        a=NULL; }

//конструктор
      Matrix (int v, int z)
     {n=v;                  
       m=z;
       a=new int*[n];
       for (int i=0;i<n;i++)
          { a[i]=new int[n];
           for (int j=0; j<n;j++)
      {cout<<"vvedite elementi matrici ";
       for(i=0;i<n;i++)
       for(j=0;j<m;j++)
      {cout<<"a["<<i<<"]["<<j<<"]=";
       cin>>a[i][j];}
       cout<<endl;}}

//деструктор
~Matrix()
    {for(int i=0;i<n;i++)
     delete a[i];// освобождение памяти
     delete a;}

     friend ostream& operator << (ostream & cout,const Matrix &B);
     friend istream& operator >> (istream & cin,Matrix &B);

};

ostream& operator<<(ostream &cout,const Matrix &x)
   { for(int i=0;i<x.n;i++)
     { for(int j=0;j<x.m;j++)
       cout<<x.a[i][j]<<" ";
       cout<<endl;}
       cout<<x.m<<" "<<x.n;
    return cout;}
     }

     

   istream &operator>>(istream &cin, Matrix &B)
{ //cout<<"n="<<"m=";
  cin>>B.n>>B.m;
delete []B.a;
B.a=new int*[B.n];
for(int i=0;i<=B.n;i++)
    {B.a[i]=new int[B.m] ;
for (int j=0;j=B.m;j++)
{ cin >> B.a[i][j]; }}
return cin;}

int _tmain(int argc, _TCHAR* argv[])
{   Matrix e,y;
        int n,m;
    cout<<"Vvedite razmer "<<"n="; cin>>n;
    cout<<"m="; cin>>m;
    cout << "vvedite matrix e:";
    cin>>e;
    cout<<"matrix y: ";
    cin>>y;
    return 0;
}
Comments (3)
ava
akizelokro | 26.09.2013, 09:20 #

for (int j=0;j=B.m;j++)


Сразу логическая ошибка

j должно быть чтоли "<= B.m". Но я не особо сегодня лихой програмист.
ava
Valya111 | 26.09.2013, 17:08 #
исправила, теперь вводит только два элемента матрицы и появляется окошко необработанного исключения
ava
akizelokro | 26.09.2013, 18:52 #
Блин, там бешено много ошибок и неудачное форматирование кода, разбираться хуже некуда.


for(int i=0;i<=B.n;i++)
    {B.a[i]=new int[B.m] ;
for (int j=0;j=B.m;j++)
{ cin >> B.a[i][j]; }}


перепиши


for(int i=0;i<=B.n;i++)
{
   B.a[i]=new int[B.m] ;
   int * prom = B.a[i];
   for (int j=0;j<=B.m;j++)
   {
        cin >> *(prom + j); 
   }
}

так чтоли

родственник приехал, извини. В одном месте там удаление ранее выделенных массивов надо делать. 
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit