Programowanie C++
Wykład 2 - podstawy języka C++
dr inż. Jakub Możaryn
Instytut Automatyki i Robotyki
Warszawa, 2014
Wstęp
Plan wykładu
Struktura programu. Zmienne i ich nazwy, podstawowe typy: całkowite, rzeczywiste, znakowe i napisowe. Instrukcje: czytania, pisania,
przypisania. Klasyfikacja typów. Stałe, wyrażenia. Komentarze i dokumentacja programu. Dodawanie bibliotek. Przestrzenie nazw.
Struktura programu
W oknie edycji kodu źródłowego ukazuje się standardowa zawartość pliku main.cpp z prostym programem wypisującym na konsoli napis „Hello World!”.
#include <iostream>
using namespace std;
int main() {
int a;
cout << "Podaj liczbe: " << endl;
cin >> a;
cout << "Podana liczba to: " << a << endl return 0;
}
Zmienne i ich nazwy
Zmienną nazywa się dana mogąca przyjmować różne wartości.
Każda zmienna występująca w programie ma swoją nazwę i przyjmuje wartości z określonego zbioru ( zdefiniowanego przez typ zmiennej)
Wszystkie zmienne występujące w programie muszą być zadeklarowane przed ich pierwszym użyciem
Popularne typy zmiennych całkowite: 10, -243, +78 rzeczywiste 1.5, 3.14, -2450.138 znakowe ’a’, ’w’, ’1’
napisowe ”podaj swoje imię:”
Zmienne i ich nazwy
Nazwa zmiennej
Dowolny ciąg liter i cyfr zaczynający się od litery. Znak podkreślenia też jest literą. Małe i duże litery są rozróżniane.
Definicja/deklaracja zmiennej
Definicja zmiennej informuje o typie zmiennej i przydziela na nią pamięć.
Definicja jest zarazem deklaracją, ale nie na odwrót (deklaracja polega tylko na określeniu typu zmiennej). i
Najpierw podaje się typ, a potem wymienia nazwy wszystkich zmiennych tego typu.
Zmienne tego samego typu można zgrupować w listę, oddzielając je przecinkami
Zmienne mogą być definiowane w dowolnym miejscu, jak tylko zajdzie potrzeba ich wykorzystania.
Zmienne i ich nazwy
Przykład definicji zmiennych prostych:
int i,j,k;
double x1,x2,y1,y2 ; y char w s k;
string nazwa, opis;
Podstawowe typy danych
Typ
Typ jest zdefiniowany przez zbiór przyporządkowanych mu wartości
Typy predefiniowane (najważniejsze):
int - podzbiór liczb całkowitych: -2147483648 .. 2147483647 float - podzbiór liczb rzeczywistych: 1.18 e-38 .. 3.40 e38 double - podzbiór liczb rzeczywistych: 2.23 e-308 .. 1.79 e308 bool - dwie wartości: true , false
char - zbiór znaków w kodzie ASCII
string - określa napis jako dowolny ciąg znaków (aby można było korzystać z umownego typu string, trzeba dołączyć odpowiednią bibliotekę: # include <string>)
Podstawowe typy danych
Typy niestandardowe (definiowane przez użytkownika, do przechowania wielu wartości pod jedną nazwą):
typ tablicowy typ strukturalny
typ plikowy typy nieprzeliczalne
typ obiektowy (w programowaniu obiektowym) typ wskaźnikowy i referencyjny
typ wyliczeniowy
Instrukcje: czytania, pisania, przypisania
Instrukcje
Polecenia dla komputera - „zmuszają” go do przetwarzania danych podczas procesu obliczeniowego. W języku C++ każda instrukcja kończy się średnikiem
Instrukcje pisania i czytania - plik z bibliotekami
Instrukcje pisania i czytania wymagają dołączenia pliku nagłówkowego biblioteki iostream. Instrukcja czytania cin>> domyślnie czyta dane z klawiatury, instrukcja pisania cout<< domyślnie wyświetla dane na monitorze.
Przestrzenie nazw
Jeśli używa się wielu bibliotek z licznymi deklaracjami, można w końcu natknąć się na problem konfliktu nazw. Rozwiązaniem jest zastosowanie przestrzeni nazw, która jest zatem zbiorem obiektów, która ogranicza dostęp do nich - oprócz nazwy obiektu niezbędne jest też wspomnienie, z której przestrzeni nazw chcemy go użyć, obchodząc tym samym problem konfliktu nazw.
Instrukcje: czytania, pisania, przypisania
Zastosowanie instrukcji pisania i czytania - określenie przestrzeni nazw
#include <iostream>
int main() {
int a;
std::cin >> a;
std::cout << a;
return 0;
}
Instrukcje: czytania, pisania, przypisania
Używając using namespace PrzestrzenNazw, podpowiadamy kompilatorowi, w którym miejscu może szukać używanych przez nas obiektów i funkcji, abyśmy mogli swobodnie używać wszystkiego co się znajduje w danej przestrzeni nazw
Zastosowanie instrukcji pisania i czytania - ominięcie przestrzeni nazw
#include <iostream>
using namespace std;
int main() {
int a;
cin >> a;
cout << a;
return 0;
}
Instrukcje: czytania, pisania, przypisania
Instrukcja przypisania - podstawienia
Instrukcja przypisania służy do nadawania zmiennej nowej wartości
Zastosowanie instrukcji przypisania
int a;
a = 10; // zmienna powinna być wcześniej zdefiniowana int b=-20; //definicja i przypisanie wartości
int k = 3;
double x = k-4.5; //zmniejsz wartość k - 4.5 k = k+1; // zwiększ wartość k o 1
double y = 2.5*(x+3)/2;
char z = ’a’;
string imie = "Witold ";
Definiowanie stałych
Stałe
Stałe definiujemy, jeśli chcemy je nazwać i używać ich nazw w programie.
Definicja stałej musi zawierać jej inicjalizację, bo wartości stałych nie można zmieniać.
Przykłady definicji stałych
const n = 5;
const int k = 2*(n+1);
const double xmin = 0.001;
const char Esc = ’ \33’;
const string pytanie = "Czy wykonac ponownie - t/n";
Podstawowe wyrażenia
Operatory arytmetyczne
+ : dodawanie / zachowanie znaku,
? : odejmowanie / zmiana znaku,
* : mnożenie, / : dzielenie,
% : reszta z dzielenia (modulo), nie może być stosowany do liczb rzeczywistych.
Operatory relacji
>, >=, <, <=
Operatory porównania
==, !=
Operatory logiczne
Podstawowe wyrażenia
Uwagi 1
Wyrażenia połączone operatorami relacji, porównania i logicznymi oblicza się od lewej do prawej
Koniec obliczeń następuje natychmiast po określeniu wartości logicznej wyrażenia
Operatory relacji mają wyższy priorytet niż operatory porównania Priorytet operatora && jest wyższy niż —— a oba są niższe niż operatorów relacji i porównania.
Uwagi 2
Dla większości operatorów dwuargumentowych, można wykorzystywać specjalne operatory przypisania, pozwalające skrócić zapis często wykorzystywanych konstrukcji.
Podstawowe wyrażenia
Wersja pełna
i = i + 2;
y = y * 2;
x = x << 1;
j = j * ( k + 1 );
flag = flag >> k;
Podstawowe wyrażenia
Operatory bitowe
& : bitowa koniunkcja (and), k : bitowa alternatywa (or), ˆ: bitowa różnica symetryczna (xor)
<< : przesunięcie w lewo
>> : przesunięcie w prawo,
˜: dopełnienie jedynkowe
Podstawowe wyrażenia
Wersja skrócona
i += 2;
y *= 2;
x <<= 1;
j *= k + 1;
flag >>= k;
Komentarze i dokumentacja programu
Komentarze są ignorowane przez kompilator, służą wyłącznie osobie czytającej tekst programu.
Komentarze zapisuje się wewnątrz par znaków /*...*/ (typ 1), co pozwala tworzyć komentarze złożone z wielu linii, lub pomiędzy znakami // (typ 2) a końcem linii.
Dwa różne typy komentarzy pozwalają tworzyć komentarze zagnieżdżone
W praktyce komentarze są bardzo przydatne. Istnieją tzw. generatory dokumentacji, które na podstawie odpowiednio ustawionych komentarzy, zgodnie z określoną konwencją, potrafią stworzyć automatycznie
dokumentację pisanego oprogramowania. Przykłady narzędzi tego typu to np. Doxygen, ApiGen, EpyDoc.
Komentarze i dokumentacja programu
Przykład komentarzy i komentarzy zagnieżdżonych:
#include <conio> // ten plik nagłówkowy należy //dołączyć, jeśli chcemy używać instrukcji // getch( );
/* Zobaczymy, co się stanie, jeśli w programie // nie będzie instrukcji getch( );na końcu.
getch( ); // to oznacza: poczekaj, aż użytkownik // wciśnie jakiś przycisk;
// ta instrukcja zatrzymuje więc działanie programu, //dzięki czemu wyniki pozostają na ekranie,
dopóki nie wciśniemy jakiegoś przycisku
*/
Dodawanie bibliotek - biblioteki i pliki nagłówkowe
Plik nagłówkowy
plik zawierający deklaracje zmiennych i funkcji tworzących bibliotekę.
Powinien być określony na początku pliku z programem.
Format dołączania plików nagłówkowych
# include <iostream> - sposób standardowy. iostream jest nazwą dołączanej biblioteki języka C++
# include <iostream.h> - starszy sposób.
Uwaga
Dołączane standardowe biblioteki i pliki nagłówkowe mogą pochodzić z języka C (stdio, stdlib, math), lub z języka C++ (cstdio, cstdlib, cmath)