class Zwierze
{
public:
string plec;
int ilosc_nog;
virtual void pokaz_plec() = 0;
virtual void ile_nog() = 0;
};
void Zwierze::pokaz_plec()
{
if(plec=="facet") cout << "Plec meska" << endl;
else cout << "Plec zenska" << endl;
}
void Zwierze::ile_nog()
{
if(ilosc_nog==4) cout << "jest to zwierze" << endl;
else cout << "jednak nie jest to zwierze" << endl;
}
Zdecyduj się albo tworzysz pustą funkcję czyli fraza = 0; w ciele klasy albo je potem inicjujesz.
Wydaje mi się, że nie można tych rzeczy ze sobą łączyć...
Hipcio ma tylko dziedziczyć te funkcje zawarte w klasie abstrakcyjnej Zwierze, a w ciele hipcia masz ustalić co one będą robić. Lub po prostu usuń = 0; ze Zwierzęta wtedy to już nie będzie klasa abstrakcyjna i będziesz ją mógł nawet zainicjować.
np:
#include <iostream>
#include <string.h>
#include <string>
using namespace std;
class Zwierze
{
public:
string plec;
int ilosc_nog;
virtual void pokaz_plec() = 0;
virtual void ile_nog() = 0;
};
class Hipopotan :public Zwierze
{
public:
string plec;
int ilosc_nog;
void pokaz_plec();
void ile_nog();
Hipopotan(string _plec= "facet", int _ilosc_nog=4)
{
plec = _plec;
ilosc_nog = _ilosc_nog;
}
void wypisz()
{
cout << plec << " " << ilosc_nog << endl;
}
};
void Hipopotan::pokaz_plec()
{
if(plec=="facet") cout << "Plec meska" << endl;
else cout << "Plec zenska" << endl;
}
void Hipopotan::ile_nog()
{
if(ilosc_nog==4) cout << "jest to zwierze" << endl;
else cout << "jednak nie jest to zwierze" << endl;
}
int main()
{
Hipopotan hip1;
hip1.ile_nog();
hip1.pokaz_plec();
return 0;
}