Strona 1 z 2

[C++] Klasa reprezentująca studenta

: 26 cze 2013, o 12:05
autor: magda87
Mam zadanie treści :
Zdefiniuj klasę służącą do przechowywania danych o studentach: album, nazwisko i imie. Zdefiniuj potrzebne metody (konstruktory domyślny, inicjujący, kopiujący). Utwórz klasę potomną sportowiec, zawierającą pole do przechowywania informacji o dyscyplinie i klasie sportowej. Dodaj potrzebne metody. Napisz program testujący działanie obiektów zdefiniowanych klas.
Mam je rozwiązać na egzamin, który mam w sobotę, problem sprawiają mi konstruktory, może ktoś pomoże.

Z góry dziękuję za pomoc:)
Pozdrawiam:)

-- 26 cze 2013, o 12:09 --

klasy wiem jak zadeklarować:

Kod: Zaznacz cały

class student
{
public:
string imie, nazwisko;
int numer_albumu;
};
class sportowiec: public student
{
public:
string dyscyplina_sportowa, klasa_sportowa;
};

[C++] Klasa reprezentująca studenta

: 26 cze 2013, o 12:17
autor: mikkuexc
Magdo, pola klasy takie jak imie, nazwisko i reszta powinny w tym przypadku być prywatne. To pierwsza wskazówka.

Zacznijmy od konstruktora domyślnego. Jak on wygląda?

[C++] Klasa reprezentująca studenta

: 26 cze 2013, o 12:19
autor: magda87
domyślny

Kod: Zaznacz cały

student ()

[C++] Klasa reprezentująca studenta

: 26 cze 2013, o 12:22
autor: mikkuexc
Ok, w takim razie dodajmy go do naszej klasy.

Kod: Zaznacz cały

class student
{
private:
string imie, nazwisko;
int numer_albumu;
public:
student(){};
};
class sportowiec: public student
{
private:
string dyscyplina_sportowa, klasa_sportowa;
public:
sportowiec(){};
};
Zajmijmy się teraz konstruktorem inicjującym w klasie student. Jakie parametry powinien przyjmować?

[C++] Klasa reprezentująca studenta

: 26 cze 2013, o 12:25
autor: magda87
ok, to rozumiem. A jak wyglądałby konstruktor kopiujący? Nie wiem jak go zdefiniować.

-- 26 cze 2013, o 12:26 --

inicjująxcy w tym przypadku powinien przyjmować parametry z klasy student-- 26 cze 2013, o 12:27 --Chyba powinien wyglądać tak:

Kod: Zaznacz cały

student::student() {}

[C++] Klasa reprezentująca studenta

: 26 cze 2013, o 12:27
autor: mikkuexc
Czy możesz dodać konstruktor inicjujący do tego kodu powyżej, żebym mógł zobaczyć czy zrobiłaś to poprawnie?
Potem zajmiemy się kopiującym.


To co napisałaś powyżej jest definicją konstruktora domyślnego, ale w osobnym pliku *.cpp.
Jeżeli definiujemy w pliku *.h to nie musimy pisać

Kod: Zaznacz cały

student::student(){};

Wystarczy samo

Kod: Zaznacz cały

student(){};

[C++] Klasa reprezentująca studenta

: 26 cze 2013, o 12:30
autor: magda87

Kod: Zaznacz cały

class student
{
private:
string imie, nazwisko;
int numer_albumu;
public:
student(){};
student::student(){};
};
class sportowiec: public student
{
private:
string dyscyplina_sportowa, klasa_sportowa;
public:
sportowiec(){};
};
mam pytanie czy w konstruktorze inicjującym muszę podać jakieś wartości początkowe dla parametrów?

[C++] Klasa reprezentująca studenta

: 26 cze 2013, o 12:33
autor: mikkuexc
Konstruktor inicjujący powinien przyjmować parametry, które będzie posiadał Twój obiekt.
Odpowiedź na Twoje pytanie Magdo: Tak, jak sama nazwa wskazuje, konstruktor inicjujący nadaje wartości początkowe parametrom.

[C++] Klasa reprezentująca studenta

: 26 cze 2013, o 12:35
autor: magda87
Czyli imie, nazwisko i numer_albumu powinnam umieścić wewnątrz tego konstruktora?

[C++] Klasa reprezentująca studenta

: 26 cze 2013, o 12:38
autor: mikkuexc
Konstruktor powinien przyjmować takie parametry jak(w przypadku klasy student):
string imie, string nazwisko, int numer_albumu. Będzie on wyglądał następująco:

Kod: Zaznacz cały

student(string imie1,string naziwsko1,int numer_albumu1)
{
imie=imie1;
nazwisko=nazwisko1;
numer_albumu=numer_albumu1;
}
Te jedynki w parametrach są po to abyś mogła rozróżnić, który parametr przypisujemy do którego. Nie są one jednak konieczne.

Teraz zastanówmy się nad konstruktorem inicjującym w klasie sportowiec.

[C++] Klasa reprezentująca studenta

: 26 cze 2013, o 12:40
autor: magda87

Kod: Zaznacz cały

class student
{
private:
string imie, nazwisko;
int numer_albumu;
public:
student(){};
student::student(string imie, string nazwisko, int numer_albumu)
{
imie = Jan;
nazwisko = Kowalski;
numer_albumu = 1245;
};
};
class sportowiec: public student
{
private:
string dyscyplina_sportowa, klasa_sportowa;
public:
sportowiec(){};
};
Tak ma to wyglądać?

[C++] Klasa reprezentująca studenta

: 26 cze 2013, o 12:41
autor: mikkuexc

Kod: Zaznacz cały

class student
{
private:
string imie, nazwisko;
int numer_albumu;
public:
student(){};
student(string imie1,string naziwsko1,int numer_albumu1)
{
imie=imie1;
nazwisko=nazwisko1;
numer_albumu=numer_albumu1;
}
};
class sportowiec: public student
{
private:
string dyscyplina_sportowa, klasa_sportowa;
public:
sportowiec(){};
};
Teraz zajmijmy się konstruktorem w klasie sportowiec.

[C++] Klasa reprezentująca studenta

: 26 cze 2013, o 12:45
autor: magda87
w klasie sportowiec ma być analogicznie do klasy student? :

Kod: Zaznacz cały

sportowiec::sportowiec(string dyscypilna_sportowa1, string klasa_sportowa1)
{
dyscyplina_sportowa = dyscyplina_sportowa1;
klasa_sportowa = klasa_sportowa1;
};
-- 26 cze 2013, o 12:47 --klasa sportowiec korzysta z danych osobowych zawartych w klasie student i ich tutaj nie trzeba deklarować, zgadza się?

[C++] Klasa reprezentująca studenta

: 26 cze 2013, o 12:51
autor: mikkuexc
Konstruktor w klasie sportowiec będzie trochę bardziej skomplikowany ponieważ musi on wywoływać konstruktor z klasy student.
Tak jak napisałaś powyżej jest ok. Ale należy jeszcze dodać listę inicjalizacyjną konstruktora w której wywołamy konstruktor klasy student. Pomogę:

Kod: Zaznacz cały

sportowiec(string imie1,string naziwsko1,int numer_albumu1,string dyscypilna_sportowa1, string klasa_sportowa1) : student(imie1,nazwisko1,numer_albumu1)
{
dyscyplina_sportowa = dyscyplina_sportowa1;
klasa_sportowa = klasa_sportowa1;
};
Tak jak pisałem powyżej Magdo, nie musisz używać pełnej nazwy czyli student::student(), wystarczy samo student();.

[C++] Klasa reprezentująca studenta

: 26 cze 2013, o 12:52
autor: magda87
na to bym nie wpadła, dzięki:)