każda klasa w oddzielnym pliku...

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?
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?