malloc jest funkcją z C, która zwraca adres na "surową" pamięć i nie wywołuje żadnych konstruktorów.
W C++ używaj new i delete (ale w nowoczesnym C++ nie używa się "nagiego" new i delete, zamiast tego używa się smart pointerów i vectorów):
class Kwadrat :public Ksztalt{
public:
static Kwadrat* Create(){
return new Kwadrat;
}
};
class Prostokat :public Ksztalt{
public:
static Prostokat* Create(){
return new Prostokat;
}
};
int main()
{
Ksztalt *wsk;
wsk = Kwadrat::Create();
wsk -> Wypisz();
delete wsk;
wsk = Prostokat::Create();
wsk -> Wypisz();
delete wsk;
return 0;
}
Jeśli już koniecznie chcesz użyć malloc to poczytaj o placement new.