[C++] Klasa reprezentująca studenta

magda87
Użytkownik
Użytkownik
Posty: 97
Rejestracja: 1 sty 2013, o 17:48
Płeć: Kobieta
Lokalizacja: pomorze
Podziękował: 6 razy

[C++] Klasa reprezentująca studenta

Post 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;
};
Ostatnio zmieniony 26 cze 2013, o 14:45 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
mikkuexc
Użytkownik
Użytkownik
Posty: 65
Rejestracja: 19 maja 2011, o 20:33
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 1 raz
Pomógł: 5 razy

[C++] Klasa reprezentująca studenta

Post 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?
magda87
Użytkownik
Użytkownik
Posty: 97
Rejestracja: 1 sty 2013, o 17:48
Płeć: Kobieta
Lokalizacja: pomorze
Podziękował: 6 razy

[C++] Klasa reprezentująca studenta

Post autor: magda87 »

domyślny

Kod: Zaznacz cały

student ()
mikkuexc
Użytkownik
Użytkownik
Posty: 65
Rejestracja: 19 maja 2011, o 20:33
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 1 raz
Pomógł: 5 razy

[C++] Klasa reprezentująca studenta

Post 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ć?
magda87
Użytkownik
Użytkownik
Posty: 97
Rejestracja: 1 sty 2013, o 17:48
Płeć: Kobieta
Lokalizacja: pomorze
Podziękował: 6 razy

[C++] Klasa reprezentująca studenta

Post 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() {}
mikkuexc
Użytkownik
Użytkownik
Posty: 65
Rejestracja: 19 maja 2011, o 20:33
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 1 raz
Pomógł: 5 razy

[C++] Klasa reprezentująca studenta

Post 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(){};
Ostatnio zmieniony 26 cze 2013, o 12:32 przez mikkuexc, łącznie zmieniany 1 raz.
magda87
Użytkownik
Użytkownik
Posty: 97
Rejestracja: 1 sty 2013, o 17:48
Płeć: Kobieta
Lokalizacja: pomorze
Podziękował: 6 razy

[C++] Klasa reprezentująca studenta

Post 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?
mikkuexc
Użytkownik
Użytkownik
Posty: 65
Rejestracja: 19 maja 2011, o 20:33
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 1 raz
Pomógł: 5 razy

[C++] Klasa reprezentująca studenta

Post 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.
Ostatnio zmieniony 26 cze 2013, o 12:35 przez mikkuexc, łącznie zmieniany 1 raz.
magda87
Użytkownik
Użytkownik
Posty: 97
Rejestracja: 1 sty 2013, o 17:48
Płeć: Kobieta
Lokalizacja: pomorze
Podziękował: 6 razy

[C++] Klasa reprezentująca studenta

Post autor: magda87 »

Czyli imie, nazwisko i numer_albumu powinnam umieścić wewnątrz tego konstruktora?
mikkuexc
Użytkownik
Użytkownik
Posty: 65
Rejestracja: 19 maja 2011, o 20:33
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 1 raz
Pomógł: 5 razy

[C++] Klasa reprezentująca studenta

Post 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.
magda87
Użytkownik
Użytkownik
Posty: 97
Rejestracja: 1 sty 2013, o 17:48
Płeć: Kobieta
Lokalizacja: pomorze
Podziękował: 6 razy

[C++] Klasa reprezentująca studenta

Post 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ć?
mikkuexc
Użytkownik
Użytkownik
Posty: 65
Rejestracja: 19 maja 2011, o 20:33
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 1 raz
Pomógł: 5 razy

[C++] Klasa reprezentująca studenta

Post 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.
magda87
Użytkownik
Użytkownik
Posty: 97
Rejestracja: 1 sty 2013, o 17:48
Płeć: Kobieta
Lokalizacja: pomorze
Podziękował: 6 razy

[C++] Klasa reprezentująca studenta

Post 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ę?
mikkuexc
Użytkownik
Użytkownik
Posty: 65
Rejestracja: 19 maja 2011, o 20:33
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 1 raz
Pomógł: 5 razy

[C++] Klasa reprezentująca studenta

Post 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();.
magda87
Użytkownik
Użytkownik
Posty: 97
Rejestracja: 1 sty 2013, o 17:48
Płeć: Kobieta
Lokalizacja: pomorze
Podziękował: 6 razy

[C++] Klasa reprezentująca studenta

Post autor: magda87 »

na to bym nie wpadła, dzięki:)
ODPOWIEDZ