p3dzi0r Opublikowano 31 Października 2004 Zgłoś Opublikowano 31 Października 2004 #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. } Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
marcinEc Opublikowano 31 Października 2004 Zgłoś Opublikowano 31 Października 2004 [...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] Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...