Serwis został przeniesiony pod nową domenę: http://cpp0x.pl/
PowrótPowrótHistoria odwiedzonych stron
AutorWiadomość
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 język
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 funkcji

int TwojaFunkcja(int x,int y);

Przykład definicji funkcji

int TwojaFunkcja(int x,int y)
{
  return(x*y+x);
}

Przykład wywołania funkcji

int 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" :D
Wielkie dzięki.

1



Statystyki tematuOstatnio przeczytali
Czytało użytkowników:14huberthx, 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



PowrótPowrótHistoria odwiedzonych stron
Panel Logowania
Login:
Hasło:

Użytkowników
Obecnie aktywnych:12
Zalogowanych:0
Zarejestrowanych:4367
Ostatnie 24h:538
Non-cookie 24h:2685
Wszystkich:214118
Ostatnia Aktualizacja
2010-09-01 19:27:34 (4 dni temu)
Ostatnio aktywni
wiew24 min
Koni34 min
Mateusz12437 min
fish1364 min
wiewiorka77 min
lenrokskate8 godz
dmx8110 godz
steckel11 godz
pixelmaster14 godz
maciejo14 godz
jurasnumeras15 godz
Imperator_Edi16 godz

Wynajem Sopot - wakacje
Pokój 2 osobowy 130zł/doba;
Lokalizacja: Sopot


O portaluArchiwumHistoriaIndeksRegulaminWyszukiwarkaLinki
Kurs HTML - strona WWW za darmoRestauracja "ATOL" - SopotValid HTML 4.01 TransitionalValid CSS!HTML CSS JavaScript FLASH PHP MySQL