Jak użyć konstruktora z klasy bazowej?

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...

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 :)

4

using TImage::TImage;

4
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(...); // <---
};
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? :)

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.

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.

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
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ść.

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