Skocz do zawartości
p3dzi0r

Tablica klas - problem

Rekomendowane odpowiedzi

#include <iostream.h>

#include <conio.h>

#include <math.h>

#include <string.h>

 

const n=50;

 

class czlowiek

{

public:

czlowiek(char imie[], char nazwisko[], int wiek){strcpy(imie2,imie); strcpy(nazwisko2,nazwisko);wiek2=wiek;}

private:

char imie2[],nazwisko2[];

int wiek2;

};

 

class uczen : public czlowiek

{

public:

uczen(char imie[], char nazwisko[], int wiek, char szkola[]) : czlowiek(imie,nazwisko,wiek) {strcpy(szkola2,szkola);}

private:

char szkola2[];

};

 

 

 

class maturzysta : public uczen

{

public:

maturzysta(char imie[], char nazwisko[], int wiek, char szkola[], char klasa[]) : uczen(imie,nazwisko,wiek,szkola) {strcpy(klasa2,klasa);}

private:

char klasa2[];

};

 

 

 

class pracownik : public czlowiek

{

public:

pracownik(char imie[], char nazwisko[], int wiek, char praca[]) : czlowiek(imie,nazwisko,wiek) {strcpy(praca2,praca);}

private:

char praca2[];

};

 

 

 

class nauczyciel : public pracownik

{

public:

nauczyciel(char imie[], char nazwisko[], int wiek, char praca[], char uczy[]) : pracownik(imie,nazwisko,wiek,praca) {strcpy(uczy2,uczy);}

private:

char uczy2[];

};

 

 

void main()

{

// no wlasnie jak stworzyc tablice klas , powiedzmy sobie np czlowiek baza[ilestam]

 

 

Witam, mam problem, otoz podczas robienia sobie bazy danych opartej na klasach i ich dziedziczeniu napatkalem maly problem, jak stworzyc tablice klas do ktorych moglbym sie odwolywac, bo jesli chce zrobic namiastke bazy danych to wlasnie takiego rozwiazania potrzebuje. Bede wdzieczny za pomoc.

}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

[...cut...]

void main()

{

// no wlasnie jak stworzyc tablice klas , powiedzmy sobie np czlowiek baza[ilestam]

 

Witam, mam problem, otoz podczas robienia sobie bazy danych opartej na klasach i ich dziedziczeniu napatkalem maly problem, jak stworzyc tablice klas do ktorych moglbym sie odwolywac, bo jesli chce zrobic namiastke bazy danych to wlasnie takiego rozwiazania potrzebuje. Bede wdzieczny za pomoc.

}

Niestety nie możesz w taki sposób.

1. czlowiek baza[ilestam];

jest to deklaracja tablicy OBIEKTÓW klasy czlowiek ale nie obiektów klas potomnych!

 

2. Żeby wyjaśnić dlaczego nie da się zadeklarować takiej tablicy: nie masz domyślnego konstruktora, który MUSI zostać zadeklarowany jawnie, jeżeli zadeklarowałes własny konstruktor z parametrami. Dla konstruowania tablic obiektów(!) jest wymagany konstruktor domyślny, czyli bezparametrowy.

 

3. Użyj tablicy wskaźników: czlowiek *baza[ilestam]; żebyś mógł wogóle wykorzystać dziedziczenie :)

Potem:

[php:1:ad271d566b]

//...

czlowiek *pcz = new nauczyciel(...);

baza[N] = pcz;

//...

[/php:1:ad271d566b]

 

Kilka porad:

4. Kopiujesz łańcuch znaków do niezaalokowanej tablicy

[php:1:ad271d566b]

//...

czlowiek(char imie[], char nazwisko[], int wiek)

{

strcpy(imie2,imie);

strcpy(nazwisko2,nazwisko);wiek2=wiek;

}

//... i kolejne konstruktory

[/php:1:ad271d566b]

 

5. Programuj zgodnie z obecnymi regułami C++!

Specyfikacja C++ mówiąca o używaniu plików nagłówkowych definiuje 32 standardowe pliki, nie ma w nich plików z rozszerzeniem .h, tylko <iostream>,<string>, itd. Ja wiem, że tego nie uczą w szkołach no ale... Użyj po includach: using namespace std;

6. Użyj string zamiast char[]. Odpadną ci problemy z ręcznym kopiowaniem i alokacją łańcuchów.

 

7. Destruktor w klasie czlowiek (ogólnie w klasie bazowej) powinien być wirtualny.

 

8. Używaj typu const char* zamiast char* jeśli tylko odczytujesz łańcuch w metodzie/konstruktorze.

 

9. Używaj list inicjacyjnych w konstruktorach do incjalizowania składowych klas.

[php:1:ad271d566b]

#include <string>

 

using namespace std;

 

class czlowiek

{

public:

czlowiek(const char *imie, const char *nazwisko, int wiek)

: wiek2( wiek ), imie2( imie), nazwisko2( nazwisko )

{ }

virtual ~czlowiek();

 

protected:

string imie2, nazwisko2;

int wiek2;

};

 

[/php:1:ad271d566b]

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...