każda klasa w oddzielnym pliku...

dział ogólny

każda klasa w oddzielnym pliku...

Nowy postprzez Arnold_S » wtorek, 10 października 2017, 00:21

Witam!
Do tej pory pisząc małe klasy na potrzeby zadań domowych z różnych książek, tworzyłem je w jednym pliku *.cpp.
Teraz chciałbym stworzyć kilka własnych klas dziedziczących z abstrakcyjnej klasy i napotkałem kilka niewiadomych.

Na przykład:
Abstrakcyjna klasa "zwierze" składa się z 2 plików: zwierze.h (deklaracje) oraz zwierze.cpp (definicje).
Jeśli jednak wszystkie funkcje będą czysto virtualne (czyli nie muszę umieszczać definicji tych funkcji dla klasy abstrakcyjnej) to po co mi plik: zwierze.cpp?
Czy wystarczy tylko plik z deklaracjami?

Następnie tworzę klasy pochodne, np.: pies, kot, ocelot. Rzecz jasna, że muszę mieć pliki: pies.h, kot.h, ocelot.h (deklaracje) oraz pies.cpp, kot.cpp, ocelot.cpp (definicje). Nie wiem jednak jak jest lepiej?
Czy prywatne składniki (które są wspólne dla wszystkich klas pochodnych) raz jeden umieścić w abstrakcyjnej klasie i nie powtarzać ich deklaracji w klasach pochodnych?
Czy może w klasie abstrakcyjnej nie umieszczać wcale składników, a umieścić je w klasach pochodnych mimo tego, że będą się powtarzały w klasie: pies, kot, ocelot?
Czy umieścić je wszędzie?

I ostatnie pytanie: jeśli includuję jakieś tam biblioteki, np: string czy cctype, to powinienem to zrobić w pliku: *.cpp?
Avatar użytkownika
Arnold_S
Bladawiec
Bladawiec
 
Posty: 33
Dołączył(a): niedziela, 12 czerwca 2016, 23:22
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Win7 32b
Kompilator: C++ Builder 6
Gadu Gadu: 0
    Windows 7Firefox

Re: każda klasa w oddzielnym pliku...

Nowy postprzez polymorphism » wtorek, 10 października 2017, 10:33

to po co mi plik: zwierze.cpp? Czy wystarczy tylko plik z deklaracjami?

Jeśli plik zwierze.cpp jest pusty, to odpowiedź nasuwa się sama. Ten podział na pliki .h i .cpp to nie jest dogmat. W przypadku małych klas czasami nie warto robić oddzielnego pliku źródłowego, wystarczy wszystko zrobić w jednym pliku nagłówkowym.

Czy prywatne składniki (które są wspólne dla wszystkich klas pochodnych) raz jeden umieścić w abstrakcyjnej klasie i nie powtarzać ich deklaracji w klasach pochodnych?

Tu także odpowiedź nasuwa się sama ;) Choć jeśli zależy Ci na "czystej" klasie-interfejsie, wtedy zrób klasę IZwierze, która zawiera tylko deklaracje metoda pure-virtual. Po niej niech dziedziczy np. ZwierzeBase, która zawiera pola i metody wspólne dla wszystkich potomków.

jeśli includuję jakieś tam biblioteki, np: string czy cctype, to powinienem to zrobić w pliku: *.cpp?

Tak by było najlepiej (ale nie zawsze się da).
C++ Reference - opis wszystkich klas STL-a i funkcji C.

Za ten post autor polymorphism otrzymał podziękowanie od:
Arnold_S
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2089
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 184
System operacyjny: Windows XP Pro SP3
Windows 7 Pro
Windows 8.1
Kompilator: Visual Studio 2015 Community
CodeLite (MinGW)
Gadu Gadu: 0
    Windows 7Firefox

Re: każda klasa w oddzielnym pliku...

Nowy postprzez Arnold_S » wtorek, 10 października 2017, 17:44

Czyli rozumiem, że mogę np. zrobić to tak (najprościej jak się da):
Kod: Zaznacz cały
                                                       klasa abstrakcyjna zwierze
                                                       - prywatne składniki klasy (dzięki temu wpiszę je tylko raz)
                                                       - funkcje pure virtual (tylko deklaracje)
                                                       - wszystko umieszczę tylko w pliku zwierze.h
                                                      /                                             \
                                                    /                                                 \
                                                  /                                                     \
                                      klasa kot                                                     klasa ocelot
                             - funkcje wirtualne (def. i dekl.)                              - tak samo jak obok


Dzięki za podpowiedzi! Przyznam szczerze, że mam kilka kont na różnych forach ale TYLKO tutaj dyskusja jest kulturalna, odpowiedzi są rzeczowe i pomocne, bez owijania w bawełnę. Bardzo fajne jest to, że chcecie się dzielić swoją wiedzą. 8-)
Avatar użytkownika
Arnold_S
Bladawiec
Bladawiec
 
Posty: 33
Dołączył(a): niedziela, 12 czerwca 2016, 23:22
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Win7 32b
Kompilator: C++ Builder 6
Gadu Gadu: 0
    Windows 7Firefox

Re: każda klasa w oddzielnym pliku...

Nowy postprzez polymorphism » wtorek, 10 października 2017, 18:44

Czyli rozumiem, że mogę np. zrobić to tak

Tak.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2089
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 184
System operacyjny: Windows XP Pro SP3
Windows 7 Pro
Windows 8.1
Kompilator: Visual Studio 2015 Community
CodeLite (MinGW)
Gadu Gadu: 0
    Windows 7Firefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość

cron