Gdzie jest błąd / metody wirtualne

0

Mam problem...

main.cpp

#include <cstdlib>
#include <iostream>
#include <conio.h>
#include "Klasy.h"

using namespace std;

int main()
{
  KlasaBazowa *pKlasa;  

  pKlasa = new KlasaBazowa;  
  pKlasa -> Inicjuj(65, 2.8);
  pKlasa -> Wypisz();
  
  delete pKlasa;
  
  pKlasa = new KlasaPochodna1;
  pKlasa -> Inicjuj(1.8f, 5, true);
  pKlasa -> Wypisz();
  
  delete pKlasa;
  
  getch();
  
  return 0;  
}

Klasy.h

#include <iostream>

class KlasaBazowa
{
      private:
              char cLiczba;
              
      protected:
              float fLiczba;
              
      public:             
             virtual void Inicjuj(char c, float f);
             virtual void Wypisz();
              
};

class KlasaPochodna1 : public KlasaBazowa
{
      private:
              int iLiczba;
              bool bCos;
              
      public:             
             void Inicjuj(float f, int i, bool b);
             void Wypisz();
             
              
};

Klasy.cpp

#include <iostream>
#include "Klasy.h"

using namespace std;

void KlasaBazowa::Inicjuj(char c, float f)
{
           cLiczba = c;
           fLiczba = f;                      
           cout << "Baza" << '\n';
}

void KlasaBazowa::Wypisz()
{
           cout << "c: " << cLiczba << '\n';
           cout << "f: " << fLiczba << '\n' << '\n';
}

void KlasaPochodna1::Inicjuj(float f, int i, bool b)
{
              fLiczba = f;
              iLiczba = i;                       
              bCos = b;
              cout << "Pochodna" << '\n';
}

void KlasaPochodna1::Wypisz()
{
           cout << "f: " << fLiczba << '\n';
           cout << "i: " << iLiczba << '\n' << '\n';
                    
}

mianowicie po wywołaniu

  pKlasa = new KlasaPochodna1;
  pKlasa -> Inicjuj(1.8f, 5, true);

w main.cpp wyrzuca mi błąd, że parametry mu nie pasują... Próbowałem też bez wartości bool ale wtedy korzystał z metody klasy bazowej zamiast pochodnej. co jest tu źle bo dopiero zaczynam metody wirtualne?

Pozdrawiam :)

0

Chyba nie do końca rozumiesz polimorfizm...
Metody które mają z niego korzystać muszą MIEĆ IDENTYCZNE DEKLARACJE! Jak sobie zmienisz listę parametrów to po prostu przeładowujesz funkcję.
Twoje funkcje Inicjuj() to są RÓŻNE funkcje! Więc nie zadziała dla nich polimorfizm.
Albo wywal tego boola z funkcji w klasie pochodnej, albo wrzuć go do klasy podstawowej, tak aby deklaracje były identyczne.

0

A to o to w tym chodzi =] myślałem, że deklaracje mają być różne. Dzięki za informacje

ps. nie mówię, że rozumiem i dlatego właśnie się pytam

Pozdrawiam

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