Ogólna struktura programu w C++ (generowana automatycznie przy tworzeniu projektu przez kompilator Dev-C++) składa się z kilku części, które zostaną opisane poniżej.
część 1 |
|
część 2 |
|
część 3 |
|
część 4 |
|
Ta część programu opisuje biblioteki, jakie mają być dołączone do programu. Biblioteki to pliki, których zawartość jest dołączana do programu za pomocą dyrektywy preprocesora #include. Biblioteka to plik o nazwie podanej w nawiasie "< nazwa biblioteki >", który zawiera między innymi definicje przydatnych funkcji.
Użycie funkcji pierwiastkującej zdefiniowanej w bibliotece cmath
#include <cstdlib>
#include <iostream>
//dodanie biblioteki cmath, w której znajduje się
//definicja funkcji pierwiastkującej sqrt
#include <cmath>
using namespace std;
int main()
{
//użycie funkcji sqrt wyznaczającej
//pierwiastek z liczby 2
cout<<sqrt(2)<<endl;
system("pause");
return 0;
}
Np. biblioteka cstdlib zawiera funkcje ogólne takie jak konwersje, alokacja pamięci czy funkcje matematyczne. Biblioteka iostream (input/output stream) jest standardową biblioteką wejścia/wyjścia w C++. Jeśli chcesz coś wyświetlić na ekranie (za pomocą obiektu cout i przeciążonego operatora "<<"), lub pobierać dane z klawiatury (za pomocą obiektu cin i przeciążonego operatora ">>") musisz ją dodać do nagłówka programu.
<Wcześniejsze wersje bibliotek miały rozszerzenie "*.h". Język C++ odchodzi od takiego nazewnictwa, gdyż pliki z tym rozszerzeniem były początkowo wykorzystywane w języku C (oczywiście C++ może nadal z nich korzystać) i dla rozdzielenia bibliotek kojarzących się z danym językiem, C++ przyjął nazwy bez rozszerzenia. Niektóre biblioteki zostały przekształcone z C na C++ i w takich przypadkach pozbyto się rozszerzenia, ale dodano literkę "c" na początku nazwy takiego pliku np.:
stara nazwa pliku | nowa nazwa pliku |
math.h stdlib.h ... |
cmath cstdlib ... |
Dyrektywę using namespace musisz użyć w przypadku, gdy zamiast pliku iostream.h, będziesz używać iostream, w celu udostępnienia definicji zawartej w tym pliku. Zasadniczo chodzi o to, żeby nie pisać za każdym razem wywołanie obiektu cout czy cin z przedrostkiem std::. Np.:
#include<iostream>
#include<cstdlib>
int main()
{
//bez użycia dyrektywy using namespace std musimy
//do każdej definicji z biblioteki
//iostream dodać przedrostek std::
std::cout<<"Ala ma kota"<<std::endl;
system("pause");
return 0;
}
Wybraź sobie, że mamy dwa pakiety, w których zdefiniowana jest funkcja o nazwie wspaniala(). Pierwszy pakiet jest od producenta JANEK, a drugi od MARCIN. Jeśli chcesz używać funkcji wspaniala() od MARCIN, bo uważasz, że jest lepsza, udostępnij definicję przestrzeni nazw MARCIN:
using namespace MARCIN;
i nie musiz za każdym wywołaniem funkcji wspaniala(), pisać MARCIN::wspaniala().
Wiąże się to także z uproszczeniem uaktualnienia starszych wersji programu, dodając tylko odpowiednią dyrektywę bez konieczności dopisywania do każdego elementu przedrostka.
Funkcja main() jest charakterystyczną funkcją w C++, która musi występować w każdej konsolowej aplikacji. Wszystko, co zaczyna się dziać w danym programie, jest określane w ciele właśnie tej funkcji. Oczywiście wszystkie inne funkcje mogą być wywoływane z jej wnętrza.
Funkcja main() ma kilka postaci:
Podczas uruchomienia programu za pomocą konsoli (w MS Windows: cmd.exe), oprócz podania nazwy programu, który chcesz uruchomić, możesz przekazać wstępne dane (parametry programu). Argument int argc, mówi, ile tych danych jest, natomiast char *argv[] przechowuje te dane. Prześledźmy przykład programu program.exe, który wyświetli argumenty danego programu:
program.cpp
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
for(int i=1;i<argc;i++)
cout<<i<<" argument to "<<argv[i]<<endl;
system("pause");
return 0;
}
Przykładowe wywołanie programu program.exe i wynik działania:
Wywołana została aplikacja z argumentami: arg1, arg2, x oraz 8991. Zauważ, że argumenty oddzielamy spacją.
Jeśli program wywołujemy bez dodatkowych parametrów, listę argumentów funkcji main() można pominąć.
W tej części programu zaczyna się życie naszej aplikacji. Wszystko to, co tu napiszemy, będzie rzutowało na sposób zachowania się programu. Oprócz słowa kluczowego return, które zostało wyjaśnione w części III, domyślnie dopisana zostaje przez Dev-C++ instrukcja system("pause") - w starszych kompilatorach Dev-C++. Powoduje ona zatrzymanie się programu i wyświetlenie komunikatu: "Aby kontynuować, naciśnij dowolny klawisz . . .".
Zauważ, że blok funkcji main(), rozpoczyna się nawiasem klamrowycm "{" i kończy się nawiasem "}".