Witam mam pewien problem i nie mogę znaleźć rozwiązanie w tym kodzie:
#include <iostream>
#include <conio.h>
class Cfigures
{
};
class Ctriangle : public Cfigures
{
private:
int side;
double height;
public:
Ctriangle(int s) { side = s; }
double sheight() { return side * sqrt(3) / 2; }
int sside() { return side; }
};
class Crectangle : public Cfigures
{
private:
int sidex;
int sidey;
public:
Crectangle(int x, int y) { sidex = x; sidey = y; }
int field() { return sidex * sidey; }
int ssidex() { return sidex; }
int ssidey() { return sidey; }
};
int main()
{
Ctriangle *wskt = new Ctriangle(3);
std::cout << "Dlugosc boku trojkata wynosi:" << wskt->sside() << std::endl;
std::cout << "Wysokosc trojkatu wynosi:" << wskt->sheight() << std::endl << std::endl;
Crectangle *wskr = new Crectangle(5, 3);
std::cout << "Dlugosci bokow prostokata wynosza \nx=" << wskr->ssidex() << "\ny=" << wskr->ssidey();
_getch();
delete wskt, wskr;
return 0;
}
chcę mieć aby jeden wskaźnik wskazywał najpierw na obiekt klasy Ctriangle, a następnie wskazywał na obiekt klasy Crectangle.
Jak stworzę wskaźnik typu Cfigure to wtedy i tak nie mogę wskazać na obiekt klasy pochodnej
Cfigure *wsk = new Ctriangle(7); // IDE pokazuje mi że wskaźnik wsk wskazuje na Cfigure
std::cout << wsk->ssidex(); // nie działa, IDE podpowiada mi że Ctriangle nie jest członkiem Cfigure
Gdzieś czytałem ze np. klasa która dziedziczy jest tym co dziedziczy ale klasa od której się dziedziczy nie musi być tym co ją dziedziczy, a wiec tworząc wskaźnik typu Cfigure nie rezerwuje pamięci dla klas które dziedziczą od jej ale polecenie:
Cfigure *wsk = new Ctriangle(7);
nie powinno rezerwować pamięć dla Ctriangle?????
Sorry za lanie wody. . .
A więc w skrócie:
Czy da się stworzyć wskaźnik który będzie mógł wskazywać najpierw na trójkąt, a potem na prostokąt?
takie coś nie działa
Ctriangle t(4);
Crectangle r(3,5);
Cfigure *wsk;
wsk = &t; // lub *wsk = t;
wsk->sside(); // to zadziała
wsk = &r; // moment błędu
wsk->ssidex(); // nie działa
Za pomoc dziękuję.