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

Konstruktor w klasie pochodnej

Ostatnio zmodyfikowano 2012-10-24 19:18
Autor Wiadomość
tirou
Temat założony przez niniejszego użytkownika
Konstruktor w klasie pochodnej
» 2012-10-24 17:02:32
Witam mam pewien problem z klasą pochodną. Otóż stworzyłem klasę pochodną o nazwie
pochodna
 z klasy bazowej o nazwie
pracownik
. Jednak nie mogę skompilować programu bo wyswietla mi błąd:

In constructor 'pochodna::pochodna(int, int)':
error: expected primary-expression before 'int'

Już nie mam pomysłu, o co tu moze chodzic. Tematem dziedziczenia zainteresowalem sie niedawno wiec byc moze nie do konca pojmuje konstruowanie konstruktorów w klasie pochodnej (gdyż jesli dobrze doczytalem, trzeba uwzglednic konstruktor klasy bazowej, i być możę tu się jakoś walnąłem).

Konstruktor klasy bazowej
(plik)
pracownik.h
->
pracownik( int );
, plik
pracownik.cpp
 ->
C/C++
pracownik::pracownik( int wolne )
{
    wolne = 28;
    urlop = wolne;
}


Konstruktor klasy pochodnej

plik
pochodna.h
 ->
pochodna( int, int );
 , plik
pochodna.cpp
 ->
C/C++
pochodna::pochodna( int lat, int wolne )
    : pracownik( int wolne )
{
    wiek = lat;
}
P-67379
mostrom
» 2012-10-24 17:43:11
Wewnątrz konstruktora klasy pochodnej definiujesz obiek klasy głównej i inicjujesz go zmienną "wolne". Dlaczego dałeś "int wolne" w nawiasie? "wolne" jest argumentem konstruktora klasy pochodnej.
Ponadto, jeśli umieszczasz klasy w plikach, to musisz pamiętać, żeby przed użyciem jakiejś klasy, zadeklarować ją. W pliku nagłówkowym pochodnej umieść pustą deklaracje klasy macierzystej.
P-67386
tirou
Temat założony przez niniejszego użytkownika
» 2012-10-24 18:39:08
Wewnątrz konstruktora klasy pochodnej definiujesz obiek klasy głównej i inicjujesz go zmienną "wolne".
Nie za bardzo rozumiem tego wyjaśnienia, chodzi ci o takie cos: (jesli nie prosze wytlumacz mi jeszcze raz co jest źle=)

pochodna.cpp
 ->
C/C++
pochodna::pochodna( int lat )
    : pracownik( int wolne )
{
    urlop = wolne; //tutaj przypisuje wartosci tak jak w konstruktorze klasy bazowej ?
    wiek = lat;
}

Dlaczego dałeś "int wolne" w nawiasie? "wolne" jest argumentem konstruktora klasy pochodnej.
Wolne jest argumentem klasy bazowej
pracownik
 a nie pochodnej.

Ponadto, jeśli umieszczasz klasy w plikach, to musisz pamiętać, żeby przed użyciem jakiejś klasy, zadeklarować ją. W pliku nagłówkowym pochodnej umieść pustą deklaracje klasy macierzystej
Pusta deklaracja klasy macierzystej (jesli chodzi ci o
#include "pracownik.h"
 ) to zadeklarowałem ją.
P-67396
mostrom
» 2012-10-24 18:41:33
Chodziło mi o to:
C/C++
pochodna::pochodna( int lat, int wolne )
    : pracownik( wolne )
{
    wiek = lat;
}

pracownik.h:
C/C++
class pracownik
{
public:
    pracownik( int wiek = 0 );
private: //blaala
}
pochodna.h:
C/C++
#include "pracownik.h"
class pochodna
    : public pracownik
{
public:
    pochodna( int wiek )
        : pracownik( wiek )
    { }
private: //blaala
}

Napisałem tylko to, jak zrozumiałem Twoją obecną sytuację, bez żadnych szczegółów, schematycznie.
Chodzi mi o to, że jeśli nie masz konstruktora domyślnego w klasie macierzystej, tylko przekazujesz jakiś argument, to w klasie pochodnej musisz wypełnić ten argument, bo każda klasa pochodna ma w sobie ukryty obiekt klasy macierzystej, który normalnie się definiuje. W związku z tym musisz podać w konstruktorze kl. pochodnej jaki argument chcesz przekazać obiektowi klasy macierzystej.
P-67397
tirou
Temat założony przez niniejszego użytkownika
» 2012-10-24 19:07:01
Albo do konca nie rozumiesz moich klas, albo ja nie rozumiem w ogole dziedziczenia :S


W klasie mam zadeklarowac taki konstruktor:

C/C++
#include "pracownik.h"
class pochodna
    : public pracownik
{
public:
    pochodna( int wiek )
        : pracownik( wiek )
    { }
private: //blaala
}

A definiujesz go tak?:

C/C++
pochodna::pochodna( int lat, int wolne )
    : pracownik( wolne )
{
    wiek = lat;
}

Przeciez te konstruktory sa niezgodne..
Poza tym w klasie bazowej przekazuje argument  "wolne" a "wiek" w klasie pochodnej
P-67399
tirou
Temat założony przez niniejszego użytkownika
» 2012-10-24 19:18:18
Juz zrozumiałem, gdzie miałem błąd. Dziekuje ci kolego "mostrom" za wszelka pomoc.

Błąd był tutaj tlyko:

C/C++
pochodna::pochodna( int lat, int wolne )
    : pracownik( wolne ) //niepotrzebny był poprostu ten int przed wolne
{
    wiek = lat;
}

P-67402
« 1 »
  Strona 1 z 1