steckel Temat założony przez niniejszego użytkownika |
Dziedziczenie konstruktora, C++ » 2009-07-27 21:42:51 Czy jest to możliwe? Jeśli tak to jak? Mam problem z tym kodem: class cObject { public: string m_strName; int m_iPositionX; int m_iPositionY; BITMAP * m_bmpImage; int m_iWidth; int m_iHeight; cObject(); cObject( string, int, int, string ); void print(); };
class cCharacter : public cObject { public: int m_iHP; int m_iAttack; int m_iDefense; int m_iInjuryMin; int m_iInjuryMax; int m_iSpeed; };
class cMonster : public cCharacter { };
class cPlayer : public cCharacter { };
Będę musiał pisać konstruktor dla każdej z klas dziedzicznych? Jeśli nie to jak mogę się odwołać do konstruktora klasy cObject dla klasy cPlayer? |
|
DeBugger |
» 2009-07-27 22:23:55 Bodajże się to robi tak (choć sam nie dziedziczyłem nigdy konstruktora): KlasaPochodna() : KlasaBazowa() Ok, Fanael i Pan Piotr wszystko wyjaśnili. |
|
DejaVu |
» 2009-07-27 22:27:46 Dokładniej: KlasaPochodna::KlasaPochodna() : KlasaBazowa() { } |
|
steckel Temat założony przez niniejszego użytkownika |
» 2009-07-27 22:56:30 Rozumiem, że trzeba napisać konstruktory do klas pochodnych, ale wystarczy tam tworzyć zmienne, które nie są tworzone w konstruktorze bazowym. Dobrze kombinuję? Wcześniej próbowałem to zrobić tak: pPlayer = new cPlayer::cCharacter::cObject( "Player", 100, 100, "pics/characters/template.bmp" );
logi: error C2440: '=' : cannot convert from 'cObject *' to 'cPlayer *'
|
|
DeBugger |
» 2009-07-28 12:56:34 Napisałem Ci kod, może coś Ci przybliży: #include <iostream> using namespace std; class Bazowa { protected: int x; public: Bazowa(); virtual ~Bazowa(); }; class Pochodna : public Bazowa { public: int xret( void ); Pochodna(); virtual ~Pochodna(); }; Bazowa::Bazowa() : x( 5 ) { } Bazowa::~Bazowa() { } int Pochodna::xret( void ) { return x; } Pochodna::Pochodna() : Bazowa() { } Pochodna::~Pochodna() { } int main() { Pochodna * foo = new Pochodna(); cout << foo->xret() << endl; delete foo; } |
|
steckel Temat założony przez niniejszego użytkownika |
» 2009-07-28 19:34:26 Dzięki! Chyba sobie poradziłem, ale mam jeszcze coś takiego: 1 > main.obj: error LNK2001: unresolved external symbol "class cPlayer * pPlayer"( ? pPlayer @ @ 3PAVcPlayer @ @ A ) 1 > D:\p rojekty\inne\diablo\Debug\diablo.exe : fatal error LNK1120 : 1 unresolved externals Potencjalne błędy: main.hpp extern cPlayer * pPlayer;
main.cpp pPlayer = new cPlayer(); pPlayer->print(); delete pPlayer;
|
|
steckel Temat założony przez niniejszego użytkownika |
» 2009-07-28 19:56:21 Nie jestem zbytnio zorientowany w nazewnictwie. Możesz przybliżyć o co ci chodzi? Tu są konstruktory jakby co: cObject::cObject() { m_strName = "Object"; m_iPositionX = 0; m_iPositionY = 0; m_bmpImage = create_bitmap( 50, 50 ); m_iWidth = 50; m_iHeight = 50; }
cCharacter::cCharacter() : cObject() { m_iCurHP = m_iMaxHP = 100; m_iAttack = 20; m_iDefense = 20; m_iInjuryMin = 5; m_iInjuryMax = 10; }
cPlayer::cPlayer() : cCharacter() { } |
|
steckel Temat założony przez niniejszego użytkownika |
» 2009-07-28 20:43:15 Dzięki! Myślałem, że to wystarczy: extern cPlayer * pPlayer;
A jak mogę wywołać konstruktory z parametrami z klas cObject i cCharacter do zmiennej typu cPlayer? |
|
« 1 » 2 3 4 |