Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Dziedziczenie, a tworzone obiekty

Ostatnio zmodyfikowano 2013-12-26 14:41
Autor Wiadomość
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 » Programowanie obiektowe, C++ » PolimorfizmDziedziczenie lekcja 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ż.
C/C++
#include <iostream>
#include <string>

using namespace std;
//---------nagłówek klasy baza -------------------
class baza
{
public:
    int zycie;
    string opis;
   
    baza( int _zycie, string _opis );
    ~baza( void );
};
//------------implementacja klasy baza-------------
baza::baza( int _zycie, string _opis )
    : zycie( _zycie )
    , opis( _opis )
{
    zycie = _zycie;
    opis = _opis;
}


baza::~baza( void )
{
}

//----------nagłówek klasy gracze------------------
class gracze
    : public baza
{
public:
    int atak;
    string okrzyk;
    //int zycie;
    //string opis;
   
    gracze( int _zycie, string _opis, int _atak, string _okrzyk );
    ~gracze( void );
   
    int pokaz_zycie(); //metoda zwracajaca zycie
    string krzyki(); //metoda zwracajaca okrzyk
   
};
//----------implementacja klasy gracze--------------
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;
}
//-----------nagłówek klasy przeszkody----------------
class przeszkody
    : public baza
{
public:
    int opor;
    int wielkosc;
   
    przeszkody( int _opor, int _wielkosc );
    ~przeszkody( void );
};
//-----------------implementacja klasy przeszkody--------
przeszkody::przeszkody( int _opor, int _wielkosc )
    : baza( zycie, opis )
{
    opor = _opor;
    wielkosc = _wielkosc;
}
przeszkody::~przeszkody( void )
{
}

//===========main======================
int main()
{
    baza player1( 100, "gracz1" );
    cout << "player zycie" << endl;
    cout << player1.zycie << endl;
   
   
    //utworzenie gracza
    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;
   
}
P-100118
DejaVu
» 2013-12-26 08:02:07
Nie powinno się nadpisać, ponieważ 'player1' to inny obiekt niż 'gracz'.
P-100137
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.
P-100152
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'.
P-100153
GarryMoveOut
Temat założony przez niniejszego użytkownika
» 2013-12-26 14:41:35
Dobra już rozumiem :) dzięki
P-100164
« 1 »
  Strona 1 z 1