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

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
 
(Nie pokazano 6 pośrednich wersji utworzonych przez tego samego użytkownika)
Linia 4: Linia 4:
poprzednika z wygodą obiektowych paradygmatów programowania. W efekcie
poprzednika z wygodą obiektowych paradygmatów programowania. W efekcie
zdecydowana większość konstrukcji z języka C została bezpośrednio przeniesiona do C++.
zdecydowana większość konstrukcji z języka C została bezpośrednio przeniesiona do C++.
=== Wymagania wstępne ===
=== Wymagania wstępne ===
Niniejszy rodział ma omawiać podstawowe konstrukcje języka C++. Ponieważ jednak zostały one
Niniejszy rodział ma omawiać podstawowe konstrukcje języka C++. Ponieważ jednak zostały one
Linia 22: Linia 23:
Na początku programu deklarujemy pliki nagłówkowe:
Na początku programu deklarujemy pliki nagłówkowe:
<Source>#include <iostream></Source>
<Source>#include <iostream></Source>
#include to tzw. dyrektywa preprocesora, która spowoduje dołączenie tresci
<b><nowiki>#</nowiki>include</b> to tzw. dyrektywa preprocesora, która spowoduje dołączenie tresci
żądanego pliku nagłowkowego do naszego programu.  
żądanego pliku nagłówkowego do naszego programu.  
Dyrektywa #include działa analogicznie jak w jezyku C, zmieniły się natomiast pliki,
Dyrektywa <b><nowiki>#</nowiki>include</b> 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
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  
narzedzie programisty, doczekał się rozbudowanej biblioteki standardowej o wiele  
Linia 43: Linia 44:
jest informacją dla kompilatora umożliwia nam korzystanie z nich. Gdybyśmy tego nie zrobili
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  
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.
do tej std poprzedzac napisem <b>std::</b>, na przyklad: <b>std::cout</b> zamiast <b>cout</b>.


Po wyżej opisanych dyrektywach następuje treść programu:
Po wyżej opisanych dyrektywach następuje treść programu:
Linia 55: 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 80: 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.