Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Dzielenie kodu na kilka plików źródłowych

Ostatnio zmodyfikowano 2007-12-30 13:46
Autor Wiadomość
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?
P-176
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.
P-177
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:

C/C++
//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 );
}


C/C++
//Plik: nazwaPliku.hpp
#ifndef nazwaPliku_hpp
#define nazwaPliku_hpp

int dodajLiczby( int a, int b );

#endif

C/C++
//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:
C/C++
#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
P-179
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 funkcji

int TwojaFunkcja( int x, int y );

Przykład definicji funkcji

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

Przykład wywołania funkcji

C/C++
int zmienna;
zmienna = TwojaFunkcja( 50, 13 );
[/tutorial]
P-180
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

C/C++
#ifndef nazwaPliku_hpp
#define nazwaPliku_hpp

int dodajLiczby( int a, int b );

#endif
P-181
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
P-182
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.
P-183
« 1 »
  Strona 1 z 1