Informatyka Wiki
Advertisement


C++ (wym. /ˌsiːˌplʌsˈplʌs/) - jeden z najpopularniejszych języków programowania, zaprojektowany przez Bjarne Stroustrupa, przez wielu programistów uważany za niskopoziomowy, wywodzący się bezpośrednio z języka C, wzbogacony o mechanizmy obiektowe.

Historia[]

Język programowania C++ został stworzony w latach osiemdziesiątych w XX wieku przez Bjarne Stroustrupa, który nie był zadowolony z możliwości oferowanych przez język C. Z tego powodu rozszerzenie stało się inspiracją dla całej reszty. Nadal pracuje się również nad ciągłym udoskonalaniem języka C++. Najważniejszą zmianą było wprowadzenie programowania obiektowego względem języka C.

Charakterystyka[]

Zalety[]

  • Język kompilowany - pracuje z dużą szybkością, a ilość wierszy nie ma znaczenia.
  • Obsługuje ASM - umożliwia częściowe operowanie na urządzeniach hardware.
  • Kompatybilny z językiem programowania C - aplikacje napisane w starszej wersji języka będą działać pod rozwiniętą wersją C++.
  • Obsługuje dużą ilość bibliotek - ma wiele możliwości w przeciwieństwie do konkurencyjnych środowisk.

Wady[]

  • Brak modułów - programista potrzebuje dodatkowych idiomów, aby stworzyć coś co jest często wbudowane w innych językach.
  • Wiele form przekazywania pobiektów podczas, gdy inny język na przykład Java wykorzystuje tylko jeden.
  • Brak przenośnego interfejsu bibliotek - kiedy programista implementuje API musi korzystać z programowania strukturalnego.
  • Język niskopoziomowy - bardziej złożony i operujący bliżej sprzętu.

Nowe cechy języka C++ względem języka ANSI C z 1989 roku[]

Uwaga: niektóre z poniższych elementów trafiły do standardu C99

  • Możliwość programowania obiektowego:
    • Mechanizmy hermetyzacji:
      • funkcje składowe
      • sekcje prywatne, chronione i publiczne
      • zaprzyjaźnianie funkcji oraz klas
    • Klasy, jako rozszerzenie struktury o funkcje składowe, enkapsulację, dziedziczenie i polimorfizm
    • Obiekty, będące instancjami klas
    • Dziedziczenie (w tym dziedziczenie wielobazowe)
    • Metody wirtualne dostarczające polimorfizm
    • Konstruktory (służące również do niejawnej konwersji; później dodano również możliwość zakazania niejawnej konwersji przez konstruktor za pomocą explicit)
    • Destruktory, czyli funkcja wywoływana niejawnie przed (ściśle ustalonym) usunięciem Obiekt|obiektu
    • Operatory new i delete
    • Dynamiczna kontrola typów (RTTI), czyli dynamiczne (sprawdzane w czasie wykonywania) rzutowanie pomiędzy typami spokrewnionych klas, oraz określanie typu w czasie wykonywania (operatory dynamic_cast oraz typeid)
    • Słowo kluczowe this (wskaźnik na obiekt, u którego wywoływana jest metoda)
    • Wskaźniki do pól i metod
    • Metody i pola statyczne
  • Udogodnienia związane z programowaniem generycznym:
    • Szablony klas i funkcji
    • Włączenie do biblioteki standardowej generycznej biblioteki STL
  • Obsługa wyjątków:
    • Deklaracja wychwytywania wyjątków: try ... catch
    • Deklaracja wywoływania wyjątku: throw
    • Deklaracja ograniczania wyjątków: throw(...) (określanie, jakie wyjątki mogą być propagowane z danej funkcji / metody)
  • Zmiany ogólnej natury:
    • Przestrzenie nazw i operator zasięgu: ::
    • Traktowanie definicji zmiennych i obiektów jak zwykłych instrukcji
    • Dynamiczna inicjalizacja zmiennych globalnych i statycznych lokalnych zmiennych (tzn. mogą być inicjowane wartością funkcji)
    • Możliwość uzyskania dostępu do przesłoniętej zmiennej globalnej za pomocą operatora zasięgu
    • Referencje
    • Słowa kluczowe const (również C99), volatile (również C99) i mutable (usuwanie modyfikatora const z podanego pola, jeśli taki został nadany całemu obiektowi)
    • Przeciążanie funkcji
    • Przeciążanie operatorów
    • Funkcje rozwijalne: inline (również C99)
    • Typ logiczny bool i stałe true (prawda) i false (fałsz) (również C99, z tym że w C++ są to słowa kluczowe)
    • „Szerszy” typ znakowy, wchar_t (również C99) wraz ze wszystkimi zależnościami (np. klasy strumieniowe, w tym wiostream, oraz dodatkowe pliki nagłówkowe, np. wstring)
    • Operatory precyzyjnego rzutowania: dynamic_cast (rzutowanie tylko pomiędzy typami, z uwzględnieniem hierarchii klas), reinterpret_cast (rzutowanie wymuszone tylko pomiędzy typami) i const_cast (rzutowanie zmieniające modyfikatory typu const i volatile)

Przykładowy program[]

Poniższy program wyprowadza napis "Hello, World!" na standardowe wyjście:

// Włączenie pliku nagłówkowego biblioteki (biblioteka strumieni wejścia-wyjścia)
#include <iostream>

// Włączenie przestrzeni nazw std (standardowa przestrzeń nazw, zawierająca podstawowe funkcje, klasy i obiekty jak: cout, cin, cerr, endl, string itd.)
using namespace std;

// Definicja funkcji o nazwie main (funkcja główna, od niej rozpoczyna się działanie programu)
int main() {
    // Wyświetlenie napisu "Hello, World!" na standardowe wyjście
    cout << "Hello, World!" << endl;

    // Zakończenie funkcji ze zwróceniem wartości 0
    return 0;
}

Zastosowanie[]

Język C++ nadal cieszy się dużą popularnością i jest często wykorzystywany w:

  • sterownikach sprzętowych,
  • aplikacjach,
  • grach komputerowych

[]

Smallwikipedialogo.png
Advertisement