[C++] Dziedziczenie, a tworzone obiekty
Ostatnio zmodyfikowano 2013-12-26 14:41
GarryMoveOut Temat założony przez niniejszego użytkownika |
[C++] Dziedziczenie, a tworzone obiekty » 2013-12-25 18:56:35 Mam problem. Zacząłem pisać grę, otworzyłem 3 klasy. Pomijam problem z charami i stringami (bo to teraz drugorzędny problem). No i okazało się że w zadaniu mam że według mojego kodu, klasa gracze i przeszkody mają dziedziczyć po klasie baza. No i teraz mam problem bo nigdy tego nie robiłem, w dodatku jeszcze miałem nagłówek i implementacje wszystkich klas robić w odzielnych plikach. Ale to zostawiam sobie na koniec, później potworze oddzielne pliki. No ale przejde do głównego problemu. Mój VS2012 wywala mi błąd przy konstruktorach w klasach które dziedziczą. Czytałem wiele stron i mam taki mętlik w głowie że już nie wiem jak to mam zrobić. No bo czytałem Dziedziczenie i tam jest troche zamieszane z tymi a x itd i nie mogę się połapać. mój kod: Kompilator wywala mi "baza" : niedostępny odpowiedni konstruktor domyślny Nie wiem jak pozbyć się tego błędu EDIT Poprawiłem konstruktory ale nie jestem pewien jeszcze czy wszystko jest jak powinno być. No kompilator nie zwraca błędu ale czy nie będzie problemów z dziedziczeniem ? Ale mam drugi problem z stringami. Program się wywala po skompilowaniu. "Unhandled exception" EDIT2 Poprawiłem dziedziczenie ale jeszcze chyba coś jest spartolone. Mam problem z dziedziczeniem zmiennej zycie. Pierw tworze obiekt player1 z wartoscia zycie 100 potem obiekt gracz z wartoscia życie 90 no i powinno się nadpisać to a player1 dalej ma życie 100 opis z resztą też. #include <iostream> #include <string>
using namespace std;
class baza { public: int zycie; string opis; baza( int _zycie, string _opis ); ~baza( void ); };
baza::baza( int _zycie, string _opis ) : zycie( _zycie ) , opis( _opis ) { zycie = _zycie; opis = _opis; }
baza::~baza( void ) { }
class gracze : public baza { public: int atak; string okrzyk; gracze( int _zycie, string _opis, int _atak, string _okrzyk ); ~gracze( void ); int pokaz_zycie(); string krzyki(); };
gracze::gracze( int _z, string _o, int _atak, string _okrzyk ) : baza( _z, _o ) , atak( _atak ) , okrzyk( _okrzyk ) { atak = _atak; okrzyk = _okrzyk; } gracze::~gracze( void ) { } int gracze::pokaz_zycie() { return zycie; } string gracze::krzyki() { return okrzyk; }
class przeszkody : public baza { public: int opor; int wielkosc; przeszkody( int _opor, int _wielkosc ); ~przeszkody( void ); };
przeszkody::przeszkody( int _opor, int _wielkosc ) : baza( zycie, opis ) { opor = _opor; wielkosc = _wielkosc; } przeszkody::~przeszkody( void ) { }
int main() { baza player1( 100, "gracz1" ); cout << "player zycie" << endl; cout << player1.zycie << endl; gracze gracz( 90, "foo", 10, "hurra" ); cout << "gracz zycie metoda" << endl; cout << gracz.pokaz_zycie() << endl; cout << "gracz zycie wartosc" << endl; cout << gracz.zycie << endl; cout << "player zycie" << endl; cout << player1.zycie << endl; cout << "player opis" << endl; cout << player1.opis << endl; cout << "gracz opis" << endl; cout << gracz.opis << endl; cout << "gracz ataak" << endl; cout << gracz.atak << endl; cout << "gracz metoda krzyk" << endl; cout << gracz.krzyki() << endl; system( "Pause" ); return 0; }
|
|
DejaVu |
» 2013-12-26 08:02:07 Nie powinno się nadpisać, ponieważ 'player1' to inny obiekt niż 'gracz'. |
|
GarryMoveOut Temat założony przez niniejszego użytkownika |
» 2013-12-26 13:27:18 No faktycznie. Czyli jak mam utworzyć obiekt który będzie dziedziczył życie oraz opis z klasy baza ? Muszę utworzyć obiekt w klasie gracze a potem odziedziczyć? Bo trochę się już zamotałem. |
|
DejaVu |
» 2013-12-26 13:43:29 Masz klasę 'gracze' która dziedziczy po 'baza'. Tworząc obiekt typu 'gracze' będzie on miał cechy 'klasy gracze' i cechy klasy 'baza'. |
|
GarryMoveOut Temat założony przez niniejszego użytkownika |
» 2013-12-26 14:41:35 Dobra już rozumiem :) dzięki |
|
« 1 » |