Język C++ jest językiem programowania "o wielu paradygmatach", m.in. również obiektowo zorientowanym. Stworzony w latach osiemdziesiątych XX wieku przez Bjarne Stroustrupa. Na język C++ wpływ miały, poza językiem C, jako jego podstawą, przede wszystkim Simula, z której zaczerpnął właściwości obiektowe, a także języki takie, jak Algol, Ada, ML i Clu.
Historia
Początkowo język C++ był dostępny w takim standardzie, w jakim opracowano ostatnią wersję kompilatora Cfront (tłumaczący C++ na C), później opublikowano pierwszy nieformalny standard zwany ARM (Annotated Reference Manual), który sporządzili Bjarne Stroustrup i Margaret Ellis. Standard języka C++ powstał w 1998 roku (ISO/IEC 14882-1998 "Information Technology - Programming Languages - C++"). Standard ten zerwał częściowo wsteczną zgodność z ARM w swojej bibliotece standardowej; jedyne, co pozostało w stanie w miarę nienaruszonym to biblioteka iostream.
Początkowo najważniejszą rzeczą wprowadzoną w C++ w stosunku do C było programowanie obiektowe, później jednak wprowadzono do niego mnóstwo ulepszeń, czyniąc ten język wygodniejszym i bardziej elastycznym od swojego pierwowzoru. Nie od rzeczy jest też wspomnieć, że niektóre zmiany w standardzie języka C były w większości zainspirowane językiem C++ (np. słowo const).
Nazwa języka została zaproponowana przez Ricka Mascitti w 1983 roku, kiedy to po raz pierwszy użyto tego języka poza laboratorium naukowym. Odzwierciedla ona fakt, że język ten jest rozszerzeniem języka C. Wcześniej używano nazwy "C z klasami".
Pierwsze kompilatory języka C++, podobnie jak Cfront, były wyłącznie translatorami na język C. Kompilatory takie dostępne są i dziś, ale niestety nie oferują one wszystkich właściwości języka C++. Pierwszym kompilatorem natywnym (produkującym od razu kod asemblerowy) dla języka C++ był g++ z pakietu GCC, którego pierwszym autorem był Michael Tiemann, założyciel Cygnus Solutions.
Przykładowy program
#include <iostream> // wstawiamy plik nagłówkowy biblioteki iostream
int main() // funkcja main
{
std::cout << "Hello world!" << std::endl; //wprowadzenie tekstu na ekran
}
Zamiast ciągle wpisywać std:: można na początku programu dopisać using namespace std;, na przykład:
#include <iostream> // wstawiamy plik nagłówkowy biblioteki iostream
using namespace std;
int main() // funkcja main
{
cout << "Hello world!" << endl; //wprowadzenie tekstu na ekran
}
Nowe cechy języka C++
Niektóre z nich trafiły do języka C, najpierw nieoficjalnie, później zaś zostały ustandaryzowane w C99.
Klasy wraz z innymi elementami języków zorientowanych obiektowo takimi jak: dziedziczenie, metody wirtualne
Dodatkowe ulepszenia klas, konstruktory, destruktory (język C++ był pierwszym językiem w którym użyto nazwy "konstruktor" w tym właśnie znaczeniu i pierwszym językiem, który posiadał destruktory)
Szablony (wzorce) klas i funkcji
Obsługa wyjątków
Deklaracje zmiennych jako instrukcje (w ANSI C wszystkie zmienne lokalne funkcji musiały być zadeklarowane przed pierwszą jej instrukcją)
Dynamiczna inicjalizacja zmiennych globalnych i lokalnych zmiennych statycznych (tzn. mogły być inicjalizowane wynikiem wywołanej funkcji)
Operator zasięgu (::) (w ANSI C nie istnieje możliwość odwołania się do zmiennej globalnej o tej samej nazwie, co zmienna lokalna)
Dynamiczna kontrola typów RTTI
Wskaźniki do składowych (pól i metod)
Jednolinijkowe komentarze (//), pochodzące z języka B (również C99)
Funkcje rozwijalne (inline) (również C99)
Nowy typ bool i stałe true i false (również C99)
"Szeroki" typ znakowy, wchar_t (również C89) wraz ze wszystkimi zależnościami (wiostream i reszta, nagłówek <wctype>, wstring)
operatory rzutowania: static_cast, dynamic_cast, reinterpret_cast i const_cast
Podstawowymi pojęciami podczas programowania w języku C++ są:
kompilator - narzędzie (program) tłumaczące napisany przez nas kod źródłowy programu (zrozumiały dla nas) na język maszynowy (czyli zrozumiały dla komputera)
środowisko - czyli kompilator i wspierające do aplikacje (programy)
plik nagłówkowy - plik zawierający definicję używanych słów kluczowych oraz funkcji (tzw.:biblioteka statyczna)
słowo kluczowe - zastrzeżone słowo, które jest rozumiane przez kompilator
Przykładowe okno programowania w C++
Pisząc program w C++ pamiętać należy o stosowaniu wcięć, oraz o stosowaniu komentarzy. Właściwie to każdy blok kodu powinien być opisany - do czego służy, a szczególnie zawiłe linie kodu warto by były opisane linia po linii.
Kompilator ignoruje znaki pozostawione w jednej linii po postawieniu // komentarz, a jeśli chcemy wykonać dłuższy komentarz, to stosujemy ramy /* komentarz */ które mogą zawierać więcej niż jedną linię.
Nazwy programów (kodu programu)
Wszystkie pliki zawierające teksty programów w języku C++ powinny mieć charakterystyczne rozszerzenie nazwa.cpp (CPP to skrót od C Plus Plus) lub nazwa.c (dla języka C). Po tym rozszerzeniu rozpoznaje te programy kompilator.
Preprocesor
Preprocesor jest programem uruchamianym przed kompilatorem. Odpowiedzialny jest on za przetwarzanie dyrektyw, czyli słów poprzedzonych znakiem#, które odpowiedzialne są min. za obsługę plików nagłówkowych (postaci nazwa_pliku_nagłówkowego.h), które dołączane są do kodu źródłowego - w których znajdują się definicje klas oraz funkcji.
C++ jest nowoczesnym językiem wieloparadygmatowym, mającym korzenie w popularnym języku C. Na jego rozwój oddziaływało wiele języków, z których należy przede wszystkim wspomnieć Simulę i Adę. Programiści cenią go za połączenie bezkompromisowej wydajności programów wynikowych z zaawansowanymi mechanizmami umożliwiającymi programowanie na wysokim poziomie abstrakcji i kontrolę zależności między komponentami w wielkich projektach. C++ stara się zachować kompatybilność z językiem C, ale jednocześnie udostępnia szeroki wachlarz nowych mechanizmów, m.in: programowanie obiektowe z wielokrotnym dziedziczeniem i kontrolą dostępu, programowanie generyczne dzięki wykorzystaniu szablonów, przeciążanie funkcji i operatorów, automatyczne konwersje, obsługę sytuacji wyjątkowych i zarządzanie przestrzeniami nazw. Od ostatnio powstałych konkurentów, takich jak Java i C#, wyróżnia się traktowaniem typów zdefiniowanych przez użytkownika na równi z typami wbudowanymi. Niestety, to bogactwo możliwości prowadzi do znacznych komplikacji przy implementacji kompilatorów.
Nazwa C++ została wymyślona przez Rickiego Mascitti i wywodzi się z faktu, że w C wyrażenie zmienna++ oznacza inkrementację czyli zwiększenie o jeden.
4