Własne pliki nagłówkowe .h

Stronę tą wyświetlono już: 288 razy

Tworzenie dużych projektów z wykorzystaniem jednego pliku *.cpp nie jest najlepszym pomysłem, ponieważ kod programu staje się nieznośnie długi i coraz ciężej jest znajdować odpowiednie linijki kodu, który np. trzeba przerobić, lub poprawić. Z tego też względu w C++ można podzielić cały kod programu na plik główny *.cpp oraz pliki załączane. Te załączane pliki to pliki nagłówkowe *.h. Często każdemu plikowi nagłówkowemu *.h towarzyszy plik *.cpp, w którym umieszczane są deklaracje wraz z ciałami funkcji a także (w przypadku klas) metod, konstruktorów i destruktorów klas.

W celu utworzenia i dodania do projektu nowego pliku trzeba w zakładce Projekt kliknąć prawym przyciskiem myszy i z menu podręcznego wybrać pozycję Nowy plik. Program podczas kompilacji zapisze ten plik pod nazwą i z rozszerzeniem, jakiego zażyczy sobie programista, gdyż zanim dojdzie do kompilacji program poprosi o zapisanie tegoż pliku. Zanim jednak utworzyć warto jeszcze jeden plik, który będzie w projekcie wykorzystywany.

Menu umożliwiające dodawanie nowego pliku do projektu.
Rys. 1
Menu umożliwiające dodawanie nowego pliku do projektu.

Po dodaniu dwóch plików do projektu wcisnąć należy F9 i zapisać utworzone pliki pod nazwami: naglowek.h, kod.cpp.

W pliku nagłówkowym *.h należy utworzyć następujący przykładowy kod:

Listing 1
  1. #ifndef NAGLOWEK_H // jeżeli nie zdefiniowano makra NAGLOWEK_H to
  2. #define NAGLOWEK_H // definiuj makro NAGLOWEK_H
  3. #include <string>
  4. #include <iostream>
  5. #include <windows.h>
  6. void WriteText(std::string text);
  7. class point2d{
  8. double x;
  9. double y;
  10. public:
  11. point2d();
  12. point2d(double x,double y);
  13. inline double GetX() const;
  14. inline double GetY() const;
  15. inline void SetX(double x);
  16. inline void SetY(double y);
  17. };
  18. std::ostream & operator << (std::ostream & ostr, const point2d & p);
  19. #endif

W pliku kod.cpp zamieścić:

Listing 2
  1. #include "naglowek.h"
  2. void WriteText(std::string text){
  3. for(int i = 0; i < text.size(); i++){
  4. std::cout<<text[i];
  5. Sleep(50);
  6. }
  7. }
  8. point2d::point2d():x(0),y(0){};
  9. point2d::point2d(double x,double y):x(x),y(y){
  10. };
  11. double point2d::GetX() const{
  12. return x;
  13. }
  14. double point2d::GetY() const{
  15. return y;
  16. }
  17. void point2d::SetX(double x){
  18. this->x = x;
  19. }
  20. void point2d::SetY(double y){
  21. this->y = y;
  22. }
  23. std::ostream & operator << (std::ostream & ostr, const point2d & p){
  24. return ostr <<"x="<<p.GetX()<<"; y="<<p.GetY()<<";";
  25. }

Natomiast w pliku main.cpp (czyli głównym pliku, gdzie znajdować powinna się funkcja main):

Listing 3
  1. #include "naglowek.h"
  2. int main(int argc, char *argv[]) {
  3. setlocale(LC_CTYPE,"Polish");
  4. WriteText("Witam w programie!");
  5. point2d p(100,200);
  6. std::cout<<std::endl<<std::endl<<p<<std::endl<<std::endl;
  7. std::cout<<std::endl<<std::endl<<"Wciśnij enter, aby zamknąć program...";
  8. std::cin.get();
  9. return 0;
  10. }

Teraz można już skompilować i uruchomić program wciskając F9.

Tym bardzo prostym sposobem kod programu został podzielony na trzy pliki co (przy odpowiednim wykorzystaniu powyższej wiedzy) umożliwia zwiększenie czytelności kodu. Ważne jest aby zwrócić uwagę na zapis z pliku naglowek.h, gdzie konstrukcja:

Listing 4
  1. #ifndef NAGLOWEK_H // jeżeli nie zdefiniowano makra NAGLOWEK_H to
  2. #define NAGLOWEK_H // definiuj makro NAGLOWEK_H
  3. /* jakiś tam kod */
  4. #endif

pozwala zapobiec podwójnemu załączaniu tego samego kodu, co skutkowałoby wystąpieniem błędu kompilacji.

Komentarze