Wstęp do CPP/Podstawowe konstrukcje: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
 
(Nie pokazano 2 pośrednich wersji utworzonych przez tego samego użytkownika)
Linia 56: Linia 56:
Sterowanie w programie przebiega analogicznie jak w języku C.
Sterowanie w programie przebiega analogicznie jak w języku C.
Main() to funkcja główna programu - jeśli skompilujemy i uruchomimy
Main() to funkcja główna programu - jeśli skompilujemy i uruchomimy
program to wykonana zostanie wyłączbnie jej treść.
program to wykonana zostanie wyłącznie jej treść.
Jeśli funkcja main() zwraca wartość różną od 0 to oznacza to, iż program zakończył się z błędem.
Jeśli funkcja main() zwraca wartość różną od 0 to oznacza to, iż program zakończył się z błędem.
Znaczenie  treści podanej w funkcji main zostanie wyjaśnione później w tym rozdziale.
Znaczenie  treści podanej w funkcji main zostanie wyjaśnione później w tym rozdziale.
Linia 81: Linia 81:
jest ona potrzebna. Dzięki temu można ją od razu zainicjalizować:
jest ona potrzebna. Dzięki temu można ją od razu zainicjalizować:
<Source>int k = 10;
<Source>int k = 10;
k = k * j;
int m = f(k);
int m = f(k);
</Source>
</Source>
Jest to wygodny mechanizm, ponieważ praktyka programowania w C pokazuje, że częśtym błędem
Jest to wygodny mechanizm, ponieważ praktyka programowania w C pokazuje, że częstym błędem
jest korzystanie z wartości niezainicjalizowanych zmiennych.
jest korzystanie z wartości niezainicjalizowanych zmiennych.
Należy jednak pamiętać że zmienna zadeklarowana w jakimś bloku jest widoczna tylko w jego obrębie.
Należy jednak pamiętać że zmienna zadeklarowana w jakimś bloku jest widoczna tylko w jego obrębie.

Aktualna wersja na dzień 21:14, 10 sty 2007

Wprowadzenie do C++

Jężyk C++ został zaprojektowany jako ulepszony język C, zapewniający wsparcie dla programowania obiektowego. W zamierzeniach miał połączyć efektywność swojego poprzednika z wygodą obiektowych paradygmatów programowania. W efekcie zdecydowana większość konstrukcji z języka C została bezpośrednio przeniesiona do C++.

Wymagania wstępne

Niniejszy rodział ma omawiać podstawowe konstrukcje języka C++. Ponieważ jednak zostały one w większości odziedziczone po poprzedniku to w centrum zainteresowania będą te które zmieniły się w stosunku do C.Dlatego też do rozpoczęcia lektury niniejszego kursu wskazana będzie znajomość tego języka.

Struktura programu w C++

Spójrzymy na poniższy program, który wypisuje na ekran słowo "Witaj!":

#include <iostream>
using namespace std;

int main(){
  cout << "Witaj!" << endl;
  return 0;
}

Już na pierwszy rzut oka można stwierdzić, iż wygląda on nieco inaczej, niż jego odpowiednik w języku C. Na początku programu deklarujemy pliki nagłówkowe:

#include <iostream>

#include to tzw. dyrektywa preprocesora, która spowoduje dołączenie tresci żądanego pliku nagłówkowego do naszego programu. Dyrektywa #include działa analogicznie jak w jezyku C, zmieniły się natomiast pliki, które będziemy dołączać do naszych programów. Język C++, jako szeroko rozpowszechnione narzedzie programisty, doczekał się rozbudowanej biblioteki standardowej o wiele bogatszej niż język C. Dołączony w powyższym przykładzie plik iostream zawiera definicje potrzebne do korzystania z operacji wejścia/wyjścia. Dodatkowo programista ma, podobnie jak w języku C, możliwość dołącania własnych plików nagłówkowych. Robi się to w następujący sposób:

#include "moj_plik_naglowkowy.h"

Plik o nazwie moj_plik_naglowkowy.h musi sie znajdowac w bieżącym katalogu. W przeciwnym przypadku musimy podać jego dokładną lokalizację na przykład:

#include "pliki_nagowkowe/moj_plik_naglowkowy.h"

Następnie występuje instrukcja:

using namespace std;

Wszystkie nazwy pochodzące zbiblioteki standardowej C++ są zadeklarowane w przestrzeni nazw (ang. namespace) std. Umieszczenie powyższej linijki w kodzie naszego programu jest informacją dla kompilatora umożliwia nam korzystanie z nich. Gdybyśmy tego nie zrobili oczywiście nadal moglibyśmy korzystać np. ze strumienia wyjścia, tyle że musielbyśmy nazwy nalezace do tej std poprzedzac napisem std::, na przyklad: std::cout zamiast cout.

Po wyżej opisanych dyrektywach następuje treść programu:

int main(){
  cout << "Witaj!" << endl;
  return 0;
}

Każdy program musi zawierać funkcję main, która ma typ int, a wartość zwracana jest przekazywana przez program do systemu. Sterowanie w programie przebiega analogicznie jak w języku C. Main() to funkcja główna programu - jeśli skompilujemy i uruchomimy program to wykonana zostanie wyłącznie jej treść. Jeśli funkcja main() zwraca wartość różną od 0 to oznacza to, iż program zakończył się z błędem. Znaczenie treści podanej w funkcji main zostanie wyjaśnione później w tym rozdziale.

Przegląd podstawowych konstrukcji

  1. Deklaracje.

Wszystkie nazwy i wyrażenia mają określony typ, który trzeba określić przed pierwszym użyciem. Służą temu deklaracje bardzo podobne do tych z języka C o postaci:

typ_zmiennej zmienna_1, zmienna_2, ..., zmienna_k;

na przykład:

int x;
char c1, c2, c3;
string napis_1;
char [20] napis_2;
char * s;

Warto zauważyć, że typ zmiennej może być zarówno predefinowany (jak w przykładach powyżej), albo może to byś typ zdefiniowany przez użytkownika. Podczas gdy standard ISO C zabraniał łączenia kodu i deklaracji, o tyle dobrym nawykiem programisty C++ jest deklarowanie zmiennej dopiero wtedy gdy jest ona potrzebna. Dzięki temu można ją od razu zainicjalizować:

int k = 10;
int m = f(k);

Jest to wygodny mechanizm, ponieważ praktyka programowania w C pokazuje, że częstym błędem jest korzystanie z wartości niezainicjalizowanych zmiennych. Należy jednak pamiętać że zmienna zadeklarowana w jakimś bloku jest widoczna tylko w jego obrębie. Na przykład kod:

int main(){
  int i;
  while (i < 2){
    int a = i;
    i++;
  }
  a = 2;
  return 0;
}

nie skompiluje się, gdyż zmienna a jest widoczna tylko w bloku petli while.

Istotną konsekwencja takiego podejscia jest mozliwosc zainicjalizowania zmiennej sterujacej pętlą tak, aby była widoczna tylko w jej obrębie.

int main(){
  for (int i = 1; i < 2; i++){
    int a = i;
  }
  return 0;
}

Niepoprawny jest natomiast kod:

#include <iostream>
using namespace std;

int main(){
  for (int i = 1; i < 2; i++){
    int a = i;
  }
  int b = i;
  return 0;
}

gdyż zmienna i została użyta poza blokiem w którym została zadeklarowana.