Witam, mam do zrobienia zadanie w którym pokaże polimorfizm poprzez metody wirtualne, a więc jest klasa Figura, która ma klasy pochodne np: Prostokąt,koło,trójkąt. Metody wirtualne mają miec nazwy: ustaw_wartosc, i oblicz pole, a dla każdych klas maja miec inne parametry w tych metodach (np dla koła ważny jest promień, nie jest to pożądane dla innych figur). Rozwiązałem problem wcześniej, jednak rozwiązanie mnie nie zadawala- po prostu w konstruktorze przypisuje wartości obiektów, jednakże chciałbym to robić nieco inaczej... i tutaj pojawia się błąd, jak go naprawić? Co robie źle? Proszę o pomoc!
Kod programu:
#include "stdafx.h"
#include <string>
#include <iostream>
/*2. (C++) In the class Figura the member functions area and set_values have been declared as virtual.
They are later redefined in each of the derived classes: PROSTOKAT TROJKAT and KOLO which additionally have specific for them members
like width, height and radius.
Use polymorphism to show how functions area and set_values work for different objects.
*/
class Figura
{
protected:
std::string RodzajZwierza;
public :
Figura(std::string);
Figura(); // wymagany był konstruktor default... nie wiem dlaczego- tak podpowiedzial kompilator, ktos mi odpowie?
__// **virtual void Oblicz_Pole()
{ std::cout << "Moge obliczyc czegos pole..." << std::endl; }
;
virtual void Ustaw_Wartosci()
{ std::cout << "Moge ustawic jakies wartosci" << std::endl; }
**//__
};
Figura::Figura(std::string JakieZwierze)
{
RodzajZwierza=JakieZwierze;
std::cout << "Utworzono jakas figure o nazwie" << RodzajZwierza<< std::endl;
}
/----------------------------------------------------------/
class Prostokat:public Figura
{
private:
int A,B,Pole;
public:
Prostokat(std::string);
void Oblicz_Pole() * tutaj jest pokazane rozwiązanie problemu na jakie wpadłem... jednak nie zadowala mnie takie rozwiązanie (nie ma * wartosci przekazywanych przez argumenty
{
std::cout << "Pole Prostokatu wynosi: " <<AB << std::endl;
Pole=AB;
}
void Ustaw_Wartosci(int a,int b) // tutaj chce przekazac wartosci przez argumenty by ustawic wartosci
{
A=a;
B=b;
}
};
Prostokat::Prostokat(std::string Jakie):Figura(Jakie)
{
std::cout << "Utworzylem Prostokat"<< std::endl;
}
/----------------------------------------------------------/
class Trojkat:protected Figura
{
void Oblicz_Pole()
{
std::cout << "Moge obliczyc czegos pole trojkatu" << std::endl; }
void Ustaw_wartosci()
{ std::cout << "Moge ustawic wartosci trojkatu" << std::endl; }
};
/----------------------------------------------------------/
int main()
{
Figura* pierwsza= new Prostokat("P1");
pierwsza->Ustaw_Wartosci(2,1); // błąd: 2 IntelliSense: too many arguments in function call
pierwsza->Oblicz_Pole();
return 0;
}
Co poprawić?? Pomóżcie bo nie moge tego znaleŹć...