RL89 Temat założony przez niniejszego użytkownika |
Dzielenie kodu na kilka plików źródłowych » 2007-12-29 23:05:56 Witam, mam pytanie odnośnie lekcji XXV w kursie.
Prócz main.cpp i pliku z rozszerzeniem .hpp musi być jeszcze jeden plik z .cpp i to o takiej samej nazwie co .hpp ? Jeśli tak to czy poprawne jest stwierdzenie, że plik .cpp z tą samą nazwą co .hpp jest jego definicją, tak jak to było przy funkcjach definiowanych? |
|
DejaVu |
Definicja, a deklaracja... » 2007-12-30 01:52:33 Generalnie widzę, że zrobiłem poważne błędy logiczne [emot src=":P"/] Deklaracja = informujemy kompilator, że dana funkcja istnieje (podajemy samą nazwę funkcji) Definicja = nazwa funkcji + kod źródłowy funkcji; Plik nagłówkowy (*.hpp) służy do tego, aby zamieszczać deklaracje, czyli informować kompilator, że dane funkcje istnieją. Plik źródłowy (*.cpp) służy do tego, aby zamieszczać definicje, czyli źródła funkcji. W kursie widzę, że jest to chyba zupełnie na odwrót, więc będzie to wymagało poprawki... /edit: Rozdziały poprawione. Rozdziały które uległy modyfikacji możesz znaleźć za pomocą archiwum: http://ddt.pl/archiwum/. Wracając do Twojego pytania... wydaje mi się, że plik *.cpp można nazywać definicją, a plik *.hpp deklaracją, ponieważ to jest właśnie cała idea plików *.cpp i *.hpp, aby oddzielić definicję od deklaracji. |
|
RL89 Temat założony przez niniejszego użytkownika |
zły przykład w programie? » 2007-12-30 12:37:05 hmm... ale z podanego przykładu: #include <iostream> #include <conio.h> #include "nazwaPliku.hpp" using namespace std; int main() { cout << "Wynik dodawania to: " << dodajLiczby( 10, 15 ) << endl; getch(); return( 0 ); }
#ifndef nazwaPliku_hpp #define nazwaPliku_hpp
int dodajLiczby( int a, int b );
#endif
#include "nazwaPliku.hpp"
int dodajLiczby( int a, int b ) { return( a + b ); }
wychodzi, że plik main.cpp jest deklaracją funkcji, plik .hpp jest wywołaniem funkcji, a plik .cpp jest definicją. Tak jak to się robiło w funkcjach w programie czyli wpierw deklaracja (pokazanie, że funkcja występuje), następnie wywołanie, a na końcu definicja (czyli krok po kroku jej wykonanie). Czyli coś jest źle zapisane w kursie w tych plikach (zamienione miejsca .hpp i .cpp)? Czyli plik main.cpp zawiera wywołanie funkcji, .hpp powinien zawierać definicję funkcji, a plik .cpp deklarację funkcji? A można nie tworzyć dodatkowego pliku .cpp? main.cpp i .hpp chyba wystarczy? Prawidłowy program funkcji zdefiniowanych: #include <iostream> #include <conio.h> using namespace std; int suma( int param_jeden, int param_dwa, int param_trzy ); int main() { int jeden, dwa, trzy, wynik; cout << "Podaj trzy liczby po kolei:"; cin >> jeden >> dwa >> trzy; wynik = suma( jeden, dwa, trzy ); cout << "\nsuma trzech podanych liczb to: " << wynik; getch(); return 0; } int suma( int param_jeden, int param_dwa, int param_trzy ) { return( param_jeden + param_dwa + param_trzy ); }
|
|
DejaVu |
Przykład jest poprawny » 2007-12-30 13:22:10 [tutorial]Przykład, który wkleiłeś jest poprawny. Plik main.cpp zawiera blok główny programu. Za pomocą dyrektywy #include dołączasz biblioteki (własne lub standardowe), dzięki którym masz dostęp do nowych funkcji. W pliku *.hpp są deklaracje funkcji, jakie będą dostępne po dołączeniu pliku xyz.hpp do programu głównego, a w pliku xyz.cpp jest kod źródłowy. Osobno masz interfejs, dzięki czemu szybko możesz sprawdzić przeglądając plik xyz.hpp jakie są w nim dostępne funkcje i nie musisz przebijać się przez definicje funkcji, ponieważ Ciebie nie interesuje to, jak są one napisane tylko, że one istnieją i działają. Przykład, który przytoczyłeś na końcu swojej wiadomości nie wykorzystuje dzielenia kodu na kilka plików. Przykład deklaracji funkcjiint TwojaFunkcja( int x, int y ); Przykład definicji funkcjiint TwojaFunkcja( int x, int y ) { return( x * y + x ); } Przykład wywołania funkcjiint zmienna; zmienna = TwojaFunkcja( 50, 13 );
[/tutorial] |
|
RL89 Temat założony przez niniejszego użytkownika |
» 2007-12-30 13:32:44 Czyli po prostu jak stosujemy abstrakcję proceduralną to w pliku .hpp zapisujemy deklarację funkcji (tak jak mówiłeś, że wystarczy tam zaglądnąć i nie trzeba się zagłębiać w plik zzz.cpp). Plik hpp i cpp muszą mieć taką samą nazwę. W main.cpp jest wywołanie funkcji tylko (w ogólnym szkielecie). W pliku zzz.cpp jest definicja funkcji czyli jak to wykonać. Ale zastanawia mnie dlaczego zamiast kropki jest dolna kreska przy #ifndef nazwaPliku_hpp #define nazwaPliku_hpp
int dodajLiczby( int a, int b );
#endif
|
|
DejaVu |
Nazewnictwo zmiennych » 2007-12-30 13:40:46 Tworząc zmienne za pomocą preprocesora, obowiązują nas te same zasady nazywania zmiennych jak przy tworzeniu zwykłej zmiennej za pomocą kodu C++. W nazwach zmiennych nie możemy używać kropek, przecinków itp, ponieważ mają one specjalne znaczenie. To jak będzie się nazywała zmienna zadeklarowana za pomocą dyrektywy include jest obojętne, co jest napisane w tym rozdziale. Dodatkowo warto wczytać się w podrozdział: 25.4. Budowa pliku nagłówkowego *.h *.hpp |
|
RL89 Temat założony przez niniejszego użytkownika |
Czyli wszystko ok? » 2007-12-30 13:46:31 Dzięki wielkie.
Czyli to co napisałęm wcześniej było poprawne (tekst przed pytaniem o zapis bez kropki). Jeśli tak to oznacza, że "rozumiem już to poprawnie" :D Wielkie dzięki. |
|
« 1 » |