Programiranje

C++ problem sa varijablama u podklasi

kenomax ned 2.10.2022 13:08

Pozdrav. Radim jedan kod za racunanje determinanti u C++, sa klasama, podklasama, itd. Znam da je daleko od savrsenog, ali sam napravio duzu pauzu od programiranja i sad me muci jedan problem. Kod je ispod, a ispod koda malo objasnjenje.

 

#include <iostream>

using namespace std;
class mnozenje {
  protected: int a, b, c, d, e, f;
 
  string metoda;
 
  public:
  double Dx, Dy, D=0;
  virtual double ispis() {
    return 0;
  }
  virtual double ispis2() {
    return 0;
  }
  void rezultat() {
    cout << "REZULTAT" << endl;
    cout << "METODA: " << "   " << metoda << endl;
    cout << ispis2() << endl;
  }
  mnozenje();
  ~mnozenje();
};
mnozenje::mnozenje() {
  cout << "UNOS JEDNACINA" << endl;
  cout << "PRVA JEDNACINA" << endl;
  cout << endl;
  cout << endl;
  cout << "Jednačina je tipa: ax+by=c" << endl;
  cout << "UNESI a" << endl;
  cin >> a;
  cout<<endl;
  cout << "UNESI b" << endl;
  cin >> b;
  cout<<endl;
  cout << "UNESI c" << endl;
  cin >> c;
  cout << endl;
  cout << endl;
  cout << "DRUGA JEDNACINA" << endl;
  cout << endl;
  cout << endl;
  cout << "Jednačina je tipa: dx+ey=f" << endl;
  cout << "UNESI d" << endl;
  cin >> d;
  cout<<endl;
  cout << "UNESI e" << endl;
  cin >> e;
  cout<<endl;
  cout << "UNESI f" << endl;
  cin >> f;
  cout<<endl;
  cout << endl;
  cout << endl;
}
mnozenje::~mnozenje() {
  cout << "Kraj" << endl;
}
class determinante: public mnozenje {
  double ispis() {
    
    int matdx[2][2]={{c,b},{f,e}};
    int matdy[2][2]={{a,c},{d,f}};
    int matd[2][2]={{a,b},{d,e}};
    cout << "MATRICA DX" << matdx << endl;
    cout << "MATRICA DY" << matdy << endl;
    cout << "MATRICA D" << matd << endl;
  }
};
class konacno: public mnozenje {
  public:
  double x,y;
  Dx = c * e - b * f;
  Dy = a * f - c * d;
  D = a * e - d * b;
  x = Dx / D;
  y = Dy / D;
  void rezultat() {
    metoda = "determinante";
  }
  double ispis() {
    cout << "X je " << x << endl;
    cout << "Y je " << y << endl;
  }
};
int main() {
  mnozenje* mno = new determinante;
  mno -> ispis();
  delete mno;
  mnozenje* mno2 = new konacno;
  mno2 -> rezultat();
  delete mno2;
  return 0;
}

 

U podklasi "konacno" mi izbacuje syntax error za Dx, Dy, D, x i y. Meni na prvu nista pogresno ne izgleda, pokusao sam ici postupkom da ih pretvorim u double metode, ali sam se malo zapetljao zbog racunskih operacija koje se moraju izvrsiti pomocu ovih varijabli, pa pretpostavljam da tim putem ne mogu ni ici.

mbaksa ned 2.10.2022 14:00

Zahrđao sam s C++-om, no ne sjećam se da je kôd dopušten u deklaracijama klasa. Barem ne na taj način. Ako hoćeš postaviti defaultne vrijednosti prije deklariranih varijabli (članova), onda to radiš u konstruktoru, ne?

 

Moram primijetiti i da cin i cout dosad još nisam vidio da netko upotrebljava u konstruktoru. Konstruktor ne služi tome! Ti u deklaracije ubacuješ kôd koji bi trebao biti u konstruktoru, a u konstruktor ubacuješ kod koji bi trebao biti u nekoj metodi.

captain_soap_McTawish pon 3.10.2022 21:39

Uh, uh, ima tu dosta stvari koje nemaju smisla. Dakle, x, y, Dx, Dy su ti članske varijable, i ne možeš ih tako inicijalizirati već moraš u konstruktoru od klase konacno. Dakle, kad se kreira klasa konacno, ona je podklasa od mnozenje, i prvo će se pozvati njegov konstruktor, on po tome popuni varijable a,b,c,d,e,f preko standardnog ulaza. E onda ide konstruktor u konacnu, i te inicjializacije dodaj u konacno.

 

Ako hoćeš metode nadjačati u podklasi, onda ti i u njoj moraju biti virtualne (konkretno ovaj ispis,. double metode moraju nešto vraćati, inače zna biti problema na stacku, a tvoja ispis() ne vraća ništa (najbolje da bude void). Onda ispisivanje matrica, to će ti samo ispisati adresu u memoriji gdje to dvodimenzionalno polje počinje.

 

Iskreno, ne znam što pokušavaš s ovim.

andrijam pet 7.10.2022 23:20

Možda, za početak...

 

class konacno : public mnozenje {
public:
double x, y;

void rezultat() {
metoda = "determinante";
}
double ispis() {
calc();
cout << "X je " << x << endl;
cout << "Y je " << y << endl;
}

void calc()
{
Dx = c * e - b * f;
Dy = a * f - c * d;
D = a * e - d * b;
x = Dx / D;
y = Dy / D;
}
};