Najlepsze pytania
Chronologia
Czat
Perspektywa

C++

język programowania ogólnego przeznaczenia Z Wikipedii, wolnej encyklopedii

C++
Remove ads

C++język programowania ogólnego przeznaczenia, zaprojektowany przez Bjarne'a Stroustrupa jako rozszerzenie języka C o obiektowe mechanizmy abstrakcji danych i silną statyczną kontrolę typów. Zachowanie zgodności z językiem C na poziomie kodu źródłowego pozostaje jednym z podstawowych celów projektowych kolejnych standardów języka.

Szybkie fakty Pojawienie się, Paradygmat ...
Remove ads

Umożliwia abstrakcję danych oraz stosowanie kilku paradygmatów programowania: proceduralnego, obiektowego i generycznego, a także funkcyjnego i modularnego. Charakteryzuje się wysoką wydajnością kodu wynikowego, bezpośrednim dostępem do zasobów sprzętowych i funkcji systemowych, łatwością tworzenia i korzystania z bibliotek (napisanych w C++, C lub innych językach), niezależnością od konkretnej platformy sprzętowej lub systemowej (co gwarantuje wysoką przenośność kodów źródłowych) oraz niewielkim środowiskiem uruchomieniowym. Podstawowym obszarem jego zastosowań są aplikacje i systemy operacyjne.

W latach 90. XX wieku język C++ zdobył pozycję jednego z najpopularniejszych języków programowania ogólnego przeznaczenia. Według ankiety z 2015 roku liczba programistów C++ wynosi około 4,4 miliona[1][2].

Remove ads

Cechy standardów

Podsumowanie
Perspektywa

Projekt języka C++ usiłuje zachować możliwie jak największą zgodność (na poziomie kodu źródłowego) z językiem C. Zgodność pomiędzy obydwoma językami nie zawsze była całkowita, ale jak dotąd ewentualne różnice były w praktyce nieistotne[3]. Większym problemem związanym ze zgodnością była niekompatybilność kompilatorów języka C++ w zakresie obsługiwanej składni – przez wiele lat programy napisane pod jednym nie działały pod innym. Biblioteki C++ związane z interfejsami systemów nie są przenośne poza ich obręb, co wynika z faktu, że takie interfejsy są specyficzne dla danego systemu i nie dotyczy to wyłącznie C++.

Większość użytecznych programów w C++ wymaga stosowania bibliotek niestandardowych. Są one łatwo dostępne w Sieci zarówno jako produkty własnościowe, jak i jako FLOSS. Programy napisane w C++ mogą korzystać również z zasobów bibliotek języka C.

Język C++ jest standaryzowany przez ISO. Pierwszą wersję, C++98, opublikowano w 1998 jako ISO/IEC 14882:1998[4]. Następnie kilkukrotnie standard aktualizowano: C++03[5], C++11[6][7][8] (opracowany już w 2009 jako C++0x, jednak opublikowany dopiero w 2011)[9], C++14[10] oraz C++17. Ostatnia, najnowsza z wersji standardu, nazywana C++20, opublikowana została w grudniu 2020 jako ISO/IEC 14882:2020[11].

Więcej informacji Rok, Standard C++ ...

Język C++ nie jest własnością żadnej osoby, instytucji czy korporacji.

Remove ads

Właściwości języka

  • Język C++ jest językiem wieloparadygmatowym[19]. Oznacza to, że można w nim stosować jednocześnie różne style programowania, w tym programowanie proceduralne, obiektowe, generyczne, jak również programować na poziomie asemblera.
  • Język C++ zakłada statyczną kontrolę typów; posiada też elementy dynamicznej kontroli typów.
  • Język C++ umożliwia bezpośrednie zarządzanie wolną pamięcią.
  • Projekt języka zakłada, że żadna nowa (względem języka C) cecha języka C++ nie może mieć negatywnego wpływu na szybkość działania programu lub zapotrzebowanie na pamięć operacyjną. Dzięki temu dobrze napisany program w C++ jest z reguły co najmniej równie szybki, jak jego odpowiednik napisany w C; co więcej, dzięki możliwości zastosowania algorytmów generycznych w wielu przypadkach C++ jest wyraźnie szybszy od C (np. podczas sortowania)[20].
  • Język C++ ze względu na bardzo rozbudowaną składnię oraz surowe wymogi w zakresie wydajności kodu stanowi duże wyzwanie dla twórców kompilatorów[20].
  • Do dziś (2024)[doprecyzuj!] żaden popularny kompilator nie jest w pełni zgodny z obowiązującym standardem języka, aczkolwiek ewentualne niezgodności dotyczą już tylko drugorzędnych cech języka (np. implementacji słowa kluczowego export)[21][22].
Remove ads

Historia

Podsumowanie
Perspektywa
Thumb
Bjarne Stroustrup, twórca języka C++, w swoim biurze AT&T New Jersey (ok. 2000 r.)

Język C++ został stworzony w latach osiemdziesiątych XX wieku (pierwsza wersja pojawiła się w 1979 r.) przez Bjarne'a Stroustrupa jako obiektowe rozszerzenie języka C. Poza językiem C na kształt języka C++ miały wpływ takie języki, jak Simula (z której zaczerpnął właściwości obiektowe) oraz Algol, Ada, ML i CLU.

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ą zmianą wprowadzoną w C++ w stosunku do C było programowanie obiektowe, później jednak zaimplementowano wiele innych ulepszeń, mających uczynić ten język wygodniejszym i bardziej elastycznym od swojego pierwowzoru. Niektóre zmiany w standardzie języka C były zainspirowane językiem C++ (np. słowo inline w C99).

Nazwa języka została zaproponowana przez Ricka Mascittiego 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”. Nazwa języka C++ nawiązuje do faktu bycia „następcą języka C”, przez użycie w niej operatora inkrementacji „++”. Inkrementacja to zwiększenie liczby o 1, w języku C++ do jej wykonania wykorzystywany jest ww. operator; dla przykładu:

zapis:

i = i + 1; // Zmiennej "i" przypisuje jej aktualną wartość, powiększoną o 1.

... jest równoważny[a]

++i; // Również powiększa wartość zmiennej "i" o 1.
// Uwaga! instrukcja i++ także zwiększa wartość zmiennej, po jej użyciu.

Nazwa C++ jest więc symbolicznym stwierdzeniem, iż jest to język C, unowocześniony, o większych możliwościach.

Pierwsze kompilatory języka C++, podobnie jak Cfront, były wyłącznie translatorami na język C. Kompilatory takie dostępne są i dziś. Jednym z nich jest Comeau C++ – jeden z niewielu kompilatorów oferujących pełne wsparcie dla standardu języka. Pierwszym kompilatorem natywnym (produkującym od razu kod asemblerowy) dla języka C++ był g++ z pakietu GCC, pierwszym autorem którego był Michael Tiemann, założyciel Cygnus Solutions.

Remove ads

Przykładowy program

Poniżej zamieszczono program wyprowadzający na standardowy strumień wyjścia napis „Hello world” (w wersji przedstawianej na stronie internetowej Bjarne'a Stroustrupa)[23]:

#include <iostream>

int main()
{
    std::cout << "Hello, world!" << std::endl;
}

// zauważmy, że "return 0;" nie jest wymagane w ISO C++

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

Podsumowanie
Perspektywa

Uwaga: niektóre z poniższych elementów trafiły do standardu języka C z 1999 roku (tzw. C99).

  • Możliwość programowania obiektowego:
    • Mechanizmy hermetyzacji:
      • funkcje składowe
      • sekcje prywatne, chronione i publiczne
      • zaprzyjaźnianie funkcji i 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 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 i typeid)
    • Słowo kluczowe this (wskaźnik na obiekt, w kontekście którego wywoływana jest metoda)
    • Wskaźniki do składowych (pól i metod)
    • Metody i pola statyczne
  • Udogodnienia związane z programowaniem generycznym:
    • Szablony (wzorce) 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 natury ogólnej:
    • Przestrzenie nazw i operator zasięgu::
    • Traktowanie definicji zmiennych i obiektów jak zwykłych instrukcji
    • Dynamiczna inicjalizacja zmiennych globalnych i lokalnych zmiennych statycznych (tzn. mogą być inicjalizowane wartością funkcji)
    • Możliwość uzyskania dostępu do przesłoniętej zmiennej globalnej za pomocą operatora::
    • Referencje
    • Słowa kluczowe const, 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)
    • Nowy typ logiczny bool i stałe true i false (również C99, z tym że w C++ są to słowa kluczowe)
    • „Szeroki” 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)
Remove ads

Zobacz też

Szybkie fakty

Uwagi

  1. Jest równoważny znaczeniowo, ale wygenerowany przez kompilator kod może być różny. Czas wykonania instrukcji może zależeć od kompilatora, jak i od procesora oraz instrukcji występujących przed i po tej instrukcji, dla kompilatorów dobrze optymalizujących kod oba zapisy wygenerują identyczny kod, a nawet w przypadku różnic kodu może wykonać się on w identycznym czasie.

Przypisy

Loading content...

Linki zewnętrzne

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads