Czy ktos mi zechce pomoc?

0

Siedze nad tym juz od paru dni i nic.
Dlaczego cout w metodzie pokaz_tablice nic nie pokazuje?
podczas gdy w wypelnij tablice dziala?

#include <iostream.h>
#include <stdlib.h>
#include <time.h>

class B

{
 public:
  //int w, min_w_w,k,min_w_k,xx,yy;
  int x,y,i;
  int** tablica;
  void wypelnij_tablice();
  void pokaz_tablice();
  B(int a, int b) {x=a; y=b;tablica=NULL;}     //konstruktor
  B(const B&);   //konstruktor kopiujacy
};

void B::wypelnij_tablice()
{
i=x;
     int** tablica=new int*[x];
     while(i--)tablica[i]=new int[y];
     srand( (unsigned)time( NULL ) );
     for(int j=0;j<=x-1;j++)
        {
           for(int k=0;k<=y-1;k++)
              {
                tablica [j][k]=(rand()%31)-10;
               // cout<<tablica[j][k]<<" ";

              };
         cout<<endl;
        };

};

void B::pokaz_tablice()
{
   for(int l=0;l<=x-1;l++)
         {
          for(int m=0;m<=y-1;m++)
             {
                 cout<<tablica[l][m]; //DLACZEGO!!!
             };
          cout<<endl;
          };
};
int main()
{
  int q,w;
  cout<<"Podaj wymiar x: ";
  cin>>q;
  cout<<"Podaj wymiar y: ";
  cin>>w;
  cout<<endl;
  B tablica_dynamiczna(q,w);
  tablica_dynamiczna.wypelnij_tablice();
  tablica_dynamiczna.pokaz_tablice();
  system("PAUSE");
  return 0;
}
0

Prosta sprawa, przesłoniłeś twoją zmienną z klasy B nową zmienną lokalną o tej samej nazwie w metodzie wypelnij_tablice(). Zamień w tej metodzie:
int** tablica=new int*[x]; na :
tablica=new int*[x];

0

Dzieki Norbert

Im dalej w las tym wiecej drzew...

Teraz mam sprawic by klasa P byla pochodna klasy B i cos tam robila.
Na razie nie wazne co, bo z tego co wyczytalem o dziedziczeniu to powinna robic wszystko to co klasa B + wlasnie owe cos tam. Ale nie robi tego minimum. Co znowu sknocilem?

Oto kod:

#include <iostream.h>
#include <stdlib.h>
#include <time.h>

class B
{
 public:

  int x,y,i;
  int** tablica;
  int** wypelnij_tablice();
  void kasuj_tablice();
  void pokaz_tablice();
  void min_w_wierszu();
  void min_w_kolumnie();
  B(int a, int b) {x=a; y=b;}     //konstruktor
  B(const B&);   //konstruktor kopiujacy
};

int** B::wypelnij_tablice()
{      i=x;
       tablica=new int*[x];
     while(i--)tablica[i]=new int[y];
     srand( (unsigned)time( NULL ) );
     for(int j=0;j<=x-1;j++)
        {
           for(int k=0;k<=y-1;k++)
              {
                tablica [j][k]=(rand()%31)-10;
                cout<<tablica[j][k]<<" ";
              };
         cout<<endl;
        };
cout<<endl;
return tablica;
};

void B::kasuj_tablice()
{
  for (int j = 0; j < x-1; j++)
    {
        delete [] tablica[j];
    };
    delete [] tablica;
};
void B::pokaz_tablice()
{
    for(int j=0;j<=x-1;j++)
        {
           for(int k=0;k<=y-1;k++)
              {
                 cout<<tablica[j][k]<<"      ";
              };
          cout<<endl;
          cout<<endl;
        };
};
void B::min_w_wierszu()
{
  int w, min_w_w;
  cout<<"Podaj numer wiersza: ";
  cin>>w;
  w--;
  min_w_w=20;
  for(int l=0;l<=y-1;l++)
         {
           if (tablica[w][l]<min_w_w)
           min_w_w= tablica[w][l];
         };
  cout<<"Minimum w wierszu "<<(w+1)<<" wynosi: "<<min_w_w<<endl;
};

void B::min_w_kolumnie()
{
  int k, min_w_k;
  cout<<"Podaj numer kolumny: ";
  cin>>k;
  k--;
  min_w_k=20;
  for(int m=0;m<=x-1;m++)
         {
           if (tablica[m][k]<min_w_k)
           min_w_k= tablica[m][k];
         };
  cout<<"Minimum w kolumnie "<<(k+1)<<" wynosi: "<<min_w_k<<endl;
;}

class P : public B
{
   public:
   P(int a, int b) {x=a; y=b;} ;      //konstruktor
   int** wypelnij_tablice();
   void kasuj_tablice();
   void pokaz_tablice();

};
int main()
{
  int q,w;
  int** z;
  cout<<"Podaj wymiar x: ";
  cin>>q;
  cout<<"Podaj wymiar y: ";
  cin>>w;
  cout<<endl;
  B tablica_dynamiczna(q,w);
  tablica_dynamiczna.wypelnij_tablice();
  cout<<endl;
  tablica_dynamiczna.pokaz_tablice();
  tablica_dynamiczna.min_w_wierszu();
  tablica_dynamiczna.min_w_kolumnie();

  P tablica_dynamiczna1(q,w);
  tablica_dynamiczna1.wypelnij_tablice();
  cout<<endl;
 // tablica_dynamiczna1.pokaz_tablice();
  //tablica_dynamiczna1.min_w_wierszu();
  //tablica_dynamiczna1.min_w_kolumnie();
  tablica_dynamiczna.kasuj_tablice();
  system("PAUSE");
  return 0;
}

0

C.D.N.
Ponieważ w klasie pochodnej konstruktor będzie inicjował pola związane tylko z klasą B więc wywołaj go w miejscu konstruktora klasy pochodnej. Jeśli chcesz używać metody w klasie pochodnej o takej samej nazwie co w klasie bazowej też ją musisz zdefiniować(przeciążanie). Poniższy kod powinien zadziałać:

#include <iostream>
#include <stdlib.h>
#include <time.h>

using namespace std;
class B
{
public:

int x,y,i;
int** tablica;
int** wypelnij_tablice();
void kasuj_tablice();
void pokaz_tablice();
void min_w_wierszu();
void min_w_kolumnie();
B(int a, int b) {x=a; y=b;}

B(const B&);
B(){};
};

int** B::wypelnij_tablice()
{ i=x;
tablica=new int*[x];
while(i--)tablica[i]=new int[y];
srand( (unsigned)time( NULL ) );
for(int j=0;j<=x-1;j++)
{
for(int k=0;k<=y-1;k++)
{
tablica [j][k]=(rand()%31)-10;
cout<<tablica[j][k]<<" ";
};
cout<<endl;
};
cout<<endl;
return tablica;
};

void B::kasuj_tablice()
{
for (int j = 0; j < x-1; j++)
{
delete [] tablica[j];
};
delete [] tablica;
};
void B::pokaz_tablice()
{
for(int j=0;j<=x-1;j++)
{
for(int k=0;k<=y-1;k++)
{
cout<<tablica[j][k]<<" ";
};
cout<<endl;
cout<<endl;
};
};
void B::min_w_wierszu()
{
int w, min_w_w;
cout<<"Podaj numer wiersza: ";
cin>>w;
w--;
min_w_w=20;
for(int l=0;l<=y-1;l++)
{
if (tablica[w][l]<min_w_w)
min_w_w= tablica[w][l];
};
cout<<"Minimum w wierszu "<<(w+1)<<" wynosi: "<<min_w_w<<endl;
};

void B::min_w_kolumnie()
{
int k, min_w_k;
cout<<"Podaj numer kolumny: ";
cin>>k;
k--;
min_w_k=20;
for(int m=0;m<=x-1;m++)
{
if (tablica[m][k]<min_w_k)
min_w_k= tablica[m][k];
};
cout<<"Minimum w kolumnie "<<(k+1)<<" wynosi: "<<min_w_k<<endl;
;}

class P:public B
{
public:
P(int a, int b){B(a,b);};
// int** wypelnij_tablice();
void kasuj_tablice();
void pokaz_tablice();

};
int main()
{
int q,w;
int** z;
cout<<"Podaj wymiar x: ";
cin>>q;
cout<<"Podaj wymiar y: ";
cin>>w;
cout<<endl;
B tablica_dynamiczna(q,w);
tablica_dynamiczna.wypelnij_tablice();
cout<<endl;
tablica_dynamiczna.pokaz_tablice();
tablica_dynamiczna.min_w_wierszu();
tablica_dynamiczna.min_w_kolumnie();

P tablica_dynamiczna1(q,w);
tablica_dynamiczna1.wypelnij_tablice();
cout<<endl;
// tablica_dynamiczna1.pokaz_tablice();

//tablica_dynamiczna1.min_w_wierszu();

//tablica_dynamiczna1.min_w_kolumnie();

tablica_dynamiczna.kasuj_tablice();
system("PAUSE");
return 0;
}

0

Dzieki ponownie.

Jakos zdazylem sie z tym uporac, teraz przede mna nowe wyzwanie:
klasa pochodna ma zapewnic zapis i odczyt tablicy z pliku

0

Z tym sobie już powinieneś poradzić. Jest sporo tematów na tym forum o zabawie strumieniami w STL.

1 użytkowników online, w tym zalogowanych: 0, gości: 1