Jak użyć konstruktora z klasy bazowej?

Jak użyć konstruktora z klasy bazowej?
Dave322
  • Rejestracja:prawie 9 lat
  • Ostatnio:prawie 9 lat
  • Postów:3
0

Witam, programuje od bardzo nie dawna i chciałem dla ćwiczenia stworzyć małą grę...

Problem jest taki że ja nie do końca rozumie jak użyć konstruktora z klasy TImage (która jest bazą mojej klasy Cplayer)
Stworzyłem konstruktor dla Cplayer ale nie chce używać domyślnego konstruktora tylko ten który jest już ustawiony w bazowej klasie...

Kopiuj
class Cplayer : private TImage
{
private:
TForm *Window;
int positionX;
int positionY;
float horizontal_speed; 
float vertical_speed; 
direction isBorder; // direction to enum umieszczony w innym nagłówku

public:

//funkcja publiczne klasy


Cplayer(int,int,TForm*,AnsiString);
}; 

po tym otrzymuje błąd:
E2251 Cannot find default constructor to initialize base class 'TImage'

tak naprawdę moim celem jest stworzenia nowej klasy TImage która będzie miała dodatkowe funkcje i zmienne

Przepraszam za zły polski :)

edytowany 3x, ostatnio: Dave322
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:5 dni
  • Lokalizacja:Szczecin
4

using TImage::TImage;


pingwindyktator
  • Rejestracja:ponad 12 lat
  • Ostatnio:2 miesiące
  • Lokalizacja:Kraków
  • Postów:1055
4
Kopiuj
class Cplayer : private TImage
{
private:
TForm *Window;
int positionX;
int positionY;
float horizontal_speed; 
float vertical_speed; 
direction isBorder;
 
public:
 
//funkcja publiczne klasy
 
 
Cplayer(int,int,TForm*,AnsiString) : TImage(...); // <---
};

do not code, write prose
edytowany 1x, ostatnio: pingwindyktator
Dave322
  • Rejestracja:prawie 9 lat
  • Ostatnio:prawie 9 lat
  • Postów:3
0

Dziękuje nie myślałem że dostane odpowiedzi tak szybko
A możecie tak z ciekawości mi wyjaśnić jak to działa? :)

edytowany 1x, ostatnio: Dave322
pingwindyktator
  • Rejestracja:ponad 12 lat
  • Ostatnio:2 miesiące
  • Lokalizacja:Kraków
  • Postów:1055
2

zapis using TImage::TImage; w klasie Cplayer powoduje dziedziczenie konstruktorów klasy TImage (od C++11, wcześniej nie było takiej możliwości). Tj, konstruktory TImage są "widziane" w klasie Cplayer.

Kopiuj
struct foo {
  foo(int) { }
};

struct bar : foo {
  using foo::foo;
};

bar b(42); // dziala, zostanie wywolany odziedziczony konstruktor

Natomiast moja propozycja jest explicite wywołaniem konstruktora z klasy bazowej.

Kopiuj
struct foo {
  foo (int) { }
};

struct bar : foo {
  bar () : foo(42) { }
};

bar b(42); // nie dziala, nie ma takiego konstuktora
bar c; // dziala, konstruktor bar wywola konstruktor klasy bazowej z argumentem 42

do not code, write prose
edytowany 1x, ostatnio: pingwindyktator
Patryk27
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
2

Przy czym gracz nie jest obrazem, tak jak próbujesz go przedstawić - na takiej samej zasadzie, na jakiej Ty nie jesteś chodzącym zdjęciem.
Obraz jest tylko sprite'm i powinien być zadeklarowany jako pole klasy, a sam gracz powinien dziedziczyć po abstrakcyjnej klasie GameEntity, chcąc zachować poprawność.


Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.