Data: 2007-12-29 23:05:56
RL89 | Dzielenie kodu na kilka plików źródłowych
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? | Data: 2007-12-30 01:52:33
Piotr Szawdyński | Definicja, a deklaracja...
Generalnie widzę, że zrobiłem poważne błędy logiczne  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. | Data: 2007-12-30 12:37:05
RL89 | zły przykład w programie?
hmm... ale z podanego przykładu:
//Plik: main.cpp #include <iostream> #include <conio.h> #include "nazwaPliku.hpp" using namespace std; int main() { cout<<"Wynik dodawania to: "<<dodajLiczby(10,15)<<endl; getch(); return(0); }
//Plik: nazwaPliku.hpp #ifndef nazwaPliku_hpp #define nazwaPliku_hpp
int dodajLiczby(int a,int b);
#endif
//Plik: nazwaPliku.cpp #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);//deklaracja funkcji int main() { int jeden, dwa, trzy, wynik; cout<<"Podaj trzy liczby po kolei:"; cin>>jeden>> dwa>>trzy; wynik = suma(jeden, dwa, trzy); //wywołanie funkcji cout<<"\nsuma trzech podanych liczb to: "<<wynik; getch(); return 0; } int suma(int param_jeden, int param_dwa, int param_trzy) //definicja funkcji { //definicja funkcji return(param_jeden+param_dwa+param_trzy); //definicja funkcji } //definicja funkcji
| Data: 2007-12-30 13:22:10
Piotr Szawdyński | Przykład jest poprawny
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);
| Data: 2007-12-30 13:32:44
RL89 |
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
| Data: 2007-12-30 13:40:46
Piotr Szawdyński | Nazewnictwo zmiennych
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
| Data: 2007-12-30 13:46:31
RL89 | Czyli wszystko ok?
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"  Wielkie dzięki. | |
| Statystyki tematu | Ostatnio przeczytali |
|---|
| Czytało użytkowników: | 14 | huberthx, malan, mapauu, klarinet, Dante, pekfos, Programista129, DeBugger, Mariusz Klepaczko, megi89, ajpodd, razorek081, ppp, szarry | | Przeczytało użytkowników: | 14 | | Czytało osób ogólnie: | 179 | | Przeczytało osób ogólnie: | 179 |
| Ostatnia Aktualizacja| 2010-09-01 19:27:34 (4 dni temu) | |
| Ostatnio aktywni |
|---|
| wiew | 24 min | | Koni | 34 min | | Mateusz124 | 37 min | | fish13 | 64 min | | wiewiorka | 77 min | | lenrokskate | 8 godz | | dmx81 | 10 godz | | steckel | 11 godz | | pixelmaster | 14 godz | | maciejo | 14 godz | | jurasnumeras | 15 godz | | Imperator_Edi | 16 godz |
|