Dziedziczenie w programie z figurami-problem z klasa abstrakcyjna

0
Witam. Mam problem z dziedziczeniem w programie z figurami. Konkretnie nie wiem co zrobic z lista argumentów w funkcjach w klasie abstrakcyjnej. Wyskakuje błąd niezależnie od tego czy ograniczam ją do jednego argumentu czy do dwóch. Nie wiem co zrobić. Prosze o pomoc.  Oto kod:

#include <iostream>
#include <string>
#include <cmath>
using namespace std;
class figura
{
    public:
    	double a;
    	double b;
        
    virtual double pole(double a)=0;
    virtual double obwod(double a)=0; 
};
class kwadrat:public figura
{
    public:
        double wysokosc;
        kwadrat(double a)
        {
            wysokosc=a;
        }
        double pole(double a)
        {
            return a*a;
        }
        double obwod(double a)
        {
            return 4*a;
        }
};
class prostokat:public kwadrat
{
    public:
    
    double szerokosc;
    prostokat(double a, double bok2):kwadrat(a)
    {
        
        szerokosc=bok2;
    }
    double pole(double bok1, double bok2)
    {
        return bok1*bok2;
    }
    double obwod(double bok1, double bok2)
    {
        return (2*bok1+2*bok2);
    }
};
class kolo:public kwadrat
{
    public:
    kolo(double a):kwadrat(a)
    {
        
    }
    double pole(double a)
    {
        return M_PI*a*a;
    }
    double obwod(double a)
    {
        return 2*M_PI*a;
    }
    
};


int main()
{
	kwadrat kw(1.0);
	kolo kol(1.0);
	prostokat pros(1.0,1.0);
    figura* wskf;
        
    double r,b,c,d;
    cout<<"Ktora figure:"<<endl;
    cout<<"1.Kwadrat"<<endl;
    cout<<"2.Prostokat"<<endl;
    cout<<"3.Kolo"<<endl;
    int a;
    cin>>a;
    switch(a)
    {
        case 1:
        	cout<<"Kwadrat "<<endl;
        cout<<"podaj bok: "<<endl;
        cin>>b;
        wskf=&kw;
        wskf->pole(b);
        wskf->obwod(b);
        break;
        case 2:
        	cout<<"Prostokat"<<endl;
            cout<<"podaj 2 boki "<<endl;
        cin>>c;
        cin>>d;
        wskf=&pros;
        wskf->pole(c,d);
        wskf->obwod(c,d);
        break;
        case 3:
        	cout<<"Kolo"<<endl;
            cout<<"podaj promien: "<<endl;
        cin>>r;
        wskf=&kol;
        wskf->pole(r);
        wskf->obwod(r);
        break;
        
        
    }
    
    
    
    
    
    
}
```cpp
 
```
1

W klasie figura:

    virtual double pole()const=0;
    virtual double obwod()const=0;

W klasie kwadrat:

        kwadrat(double wysokosc):wysokosc(wysokosc) {}
        double pole()const {return a*a; }
        double obwod()const { return 4*a; }

hierarchia nieco skopana, przerób na:

figura
- oneparam
- - kwadrat
- - kolo
- - twoparam
- - - prostokat

ponieważ: class kolo:public kwadrat zakrawa na herezje.

0
wskf->pole(c,d);
wskf->obwod(c,d);

wskf to wskaźnik na obiekt figura, a ta klasa nie ma funkcji o tych nazwach z 2 argumentami. Jeśli dodasz te 2 linijki do klasy figura, to się skompiluje:

virtual double pole(double a, double b) {}
virtual double obwod(double a, double b) {}

Sens tego to inna sprawa (jak dla mnie dosyć wątpliwy).

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