W programie zazwyczaj istnieją zmienne różnych typów - liczbowe, łańcuchy, logiczne i inne. Jeżeli chcemy używać jakiejś zmiennej to musimy ją zadeklarować podając jej typ. Oto przykład:
#include<iostream>#include<string>usingnamespacestd;intmain(){stringimie="Zbylut";doublewaga=113.4;cout<<"Witaj "<<imie<<", ja być program c++"<<endl;cout<<"Gdyby ktoś się pytał to ważysz "<<waga<<"kg"<<endl;}
Na początku funkcji main zadeklarowaliśmy dwie zmienne - imie i waga. Pierwsza "typu" string, druga typu double oraz przypisaliśmy im domyślne wartości (nie jest to wymagane). Wartości zmiennych wyświetlamy wysyłając je do cout wpisując << nazwa_zmiennej - bez cudzysłowów. Program ten wyświetli:
Witaj Zbylut, ja być program c++
Gdyby ktoś się pytał to ważysz 113.4kg
. Typy danych opisane są nieco dalej a zanim do nich przejdziemy musimy omówić jeszcze kilka zagadnień...
#include<iostream>#include<string>usingnamespacestd;intmain(){stringimie;doublewaga;cout<<"Podaj imię i wagę: ";cin>>imie>>waga;cout<<"Witaj "<<imie<<", ja być program c++"<<endl;cout<<"Gdyby ktoś się pytał to ważysz "<<waga<<"kg"<<endl;}
Jest to przykład podobny nieco do pierwszego lecz w tym przypadku wartości zmiennych wpisujemy na rządanie programu. Definiujemy 2 zmienne, bez przypisania wartości domyślnej a następnie wyświetlamy tekst Podaj imię i wagę: Po jego wyświetleniu program będzie czekał aż użytkownik wprowadzi dane oddzielone spacją, np.: "Jurek 100" i wciśnie enter co spowoduje dalsze wykonanie programu, który wyświetli wprowadzone dane. cin czyli "Console Input" pobiera dane z konsoli (>> od cin do zmiennych) i przypisuje je zmiennym.
W tym przykładzie zdefiniowaliśmy nową funkcję o nazwie liniowa przyjmującą 3 argumenty typu double - liczby. Funkcja ta zwraca liczbę (funkcja double) a dokładniej wartość funkcji liniowej ax+b znanej każdemu z lekcji matematyki. W funkcji main zdefiniowaliśmy dwie z pośród trzech zmiennych dla funkcji oraz zmienną wynik na wynik zwrócony przez naszą funkcję. Do zmiennej wynik przypisujemy wartość zwróconą przez funkcję liniowa o parametrach c, 5, z - jak widać argument może być podany jako zmienna lub bezpośrednia wartość (5).
#include<iostream>usingnamespacestd;intmain(intargc,char**argv){cout<<"Nazwa programu: "<<argv[0]<<endl<<"Ilość argumentów: "<<argc<<endl;for(inti=1;i<argc;i++){cout<<"Argument nr. "<<i<<" to: "<<argv[i]<<endl;}return0;}
Zazwyczaj do programu przekazujemy jakieś dane. By funkcja main je odbierała musi być zdefiniowana z nagłówkiem:
int main(int argc, char **argv)
int main(int argc, char **argv[])
Oba zapisy są jednoznaczne. Zmienna argc zawiera ilość argumentów a argv jest tablicą - listą parametrów, z czym że pierwszy element posiadający indeks/numer 0 (zero) jest nazwą skryptu. Tak więc argv[0] to "nazwa" aplikacji, argc ilość parametrów, a argv[n] to n-ty parametr. W powyższym przykładzie stosujemy pętlę for wyświetlającą wszystkie elementy tablicy (bardzo podobne do PHP, czyż nie?). Tablice w C++ "nie wiedzą" ile mają argumentów, dlatego ich ilość musi być przekazana oddzielnie. Jeżeli naszą aplikację wywołamy z parametrami ./program bla bla bla --with=windows to dostaniemy:
Nazwa programu: ./a
Ilość argumentów: 5
Argument nr. 1 to: bla
Argument nr. 2 to: bla
Argument nr. 3 to: bla
Argument nr. 4 to: --with=windows
Preprocesor to program, który przetwarza kod przed przesłaniem go do kompilatora. Odpowiada on m.in. za np. zastąpnie #include kodem tejże biblioteki ("wkleja" ją). Oprócz tego możemy z preprocesorem trochę pogadać, wszystkie instrukcję dla preprocesora noszą nazwę dyrektyw i zaczynają się od znaku #:
#include
#include "plik"
Pierwsza linia jest już nam znana - wstawia zawartość podanej biblioteki, z tym że dotyczy bibliotek z katalogu systemowego (biblioteki kompilatora itd.) druga wstawi plik, tyle że z bierzącego katalogu (brak ostrych nawiasów).
#define nazwa wartość
#define nazwa
#undefine nazwa
Pierwsza linijka - wszystkie wystąpienia frazy "nazwa" (leksemu) zostaną zastąpione podaną wartością.:
#define dim 256
int k = dim;
int dim2 = 1;
Da:
int k = 256;
int dim2 = 1;
Frazy zawierające w sobie zdefiniowaną nazwę nie będą zamienione :) #undefine usuwa zdefiniowaną dyrektywę.
#define int double
int funkcja(int k, int m)
{
//cośtam
}
#undefine int
Dla danej funkcji "int" zostanie zastępiony przez "double" czyli funkcja będzie "pracowała" na zmiennych typu double a nie int. #undefine przywraca normalne znaczenie int dla dalszego kodu.
defined, !defined - zwrócą wartość prawda jeżeli nazwa jest zadeklarowana (lub gdy nie jest zadeklarowana dla !defined) lub wartość fałsz w przeciwnym wypadku. Dyrektywy te wykorzystuje się wraz z wyrażeniami warunkowymi:
#define dimen
// coś
#if defined dimem
// użyj tego kod jeżeli dimen jest zdefiniowany
#else
// jeżeli nie to tego
#endif
Oprócz tego mamy jeszcze #elif (else if), #ifdef ("skrót" od #if defined), #ifndef (#if !defined).
Przydać się to może np. do kontroli używanego kompilatora. Kompilator C++ definiuje nazwę __cplusplus a C __STDC__.
Comment article