Web - Amazon

We provide Linux to the World


We support WINRAR [What is this] - [Download .exe file(s) for Windows]

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
C++ - Wikipedia, wolna encyklopedia

C++

Z Wikipedii

C++ - język programowania ogólnego przeznaczenia.

Umożliwia abstrakcję danych oraz stosowanie kilku paradygmatów programowania: proceduralnego, obiektowego i generycznego. 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.

C++ został 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.

W latach 90. XX wieku język C++ zdobył pozycję jednego z najpopularniejszych języków programowania ogólnego przeznaczenia. Na początku XXI wieku liczbę programistów języka C++ szacowano na około 3 miliony [1].

Od 1998 obowiązuje standard ISO/IEC 14882:1998 (Standard for the C++ Programming Language) z drobnymi poprawkami zatwierdzonymi w 2003 r. (ISO/IEC 14882:2003). Ogłoszenie nowego standardu (tzw. C++0x) planowane jest na 2009.

Spis treści

[edytuj] Cechy standardów

Projekt języka C++ usiłuje zachować możliwie jak największą zgodność (na poziomie kodu źródłowego) z językiem C. Projektanci C++ za idealną uznaliby sytuację, w której język C byłby podzbiorem języka C++ (tj. każdy program w C byłby takim samym programem w C++, ale nie odwrotnie). Zgodność pomiędzy obydwoma językami nie zawsze była całkowita, ale jak dotąd ewentualne różnice były w praktyce nieistotne [1]. 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 jest to specyficzne tylko dla 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. W szczególności programy napisane w C++ mogą korzystać z ogromnych zasobów bibliotek języka C.

Język C++ posiada swój oficjalny standard (aktualnie jest to ISO/IEC 14882:2003 z 2003).

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

[edytuj] Właściwości języka

  • Język C++ jest językiem wieloparadygmatowym [2]. Oznacza to, ze można w nim stosować jednocześnie różne style programowania, w tym programowanie proceduralne, obiektowe, generyczne, a nawet 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).
  • 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.
  • Do dziś (2007) żaden wiodący kompilator nie jest w pełni zgodny z obowiązującym standardem języka, aczkolwiek ewentualne niezgodności dotyczą już tylko raczej mało pożądanych cech języka (np. implementacji słowa kluczowego export).
  • Język C++ nie zmusza programistów do wyboru określonego stylu programowania czy stosowania określonych rozwiązań. Otwiera to ogromne pole do popisu dla doświadczonych programistów, jednak powoduje też, że początkujący adepci C++ z reguły tworzą kod bardzo marnej jakości, często nie mając świadomości rzeczywistych efektów działania swojego kodu.

[edytuj] Historia

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 definicję 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ą 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 inline w C99).

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". 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 w/w operator; dla przykładu:

zapis:

i=i+1; // zmiennej "i" przypisujemy jej aktualną wartość, powiększoną o 1

... jest równoważny:

i++; // również powiększamy wartość zmiennej "i" o 1.

Nazwa C++ jest więc symbolicznym stwierdzeniem, iż jest to język C, unowocześniony, o znacznie 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, którego pierwszym autorem był Michael Tiemann, założyciel Cygnus Solutions.

Obecnie (2007) trwają prace nad rewizją i rozszerzeniem standardu C++ zwane roboczo C++0x. Wprawdzie przewidziane są nieznaczne zmiany w samym języku C++, ale rozszerzana jest przede wszystkim biblioteka standardowa języka. Rozszerzenia te znane są pod nazwą TR1 (od Technical Report No. 1) i zawierają przede wszystkim komponenty przejęte z biblioteki Boost.

[edytuj] Przykładowy program

Poniższy program wyprowadza napis "Hello world!" (tekst po podwójnym ukośniku to komentarz):

#include <iostream>
#include <cstdlib>
 
int main() // od funkcji main rozpoczyna się wykonanie programu w C++
{
   std::cout << "Hello world!\n"; // wyprowadzenie tekstu na standardowe wyjście
   return EXIT_SUCCESS; // wyjscie i zwrócenie do systemu informacji 
                        // o prawidłowym zakończeniu
}

[edytuj] 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 języka C z 1999 roku (tzw. C99).

  • Udogodnienia związane z programowaniem obiektowym:
    • Mechanizmy enkapsulacji:
      • funkcje składowe
      • sekcje prywatne, chronione i publiczne
      • zaprzyjaźnianie funkcji
    • 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 (dostęp do obiektu, na rzecz którego wołana 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)
  • Udogodnienia 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: static_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)

Przypisy

[edytuj] Zobacz też

Wikibooks
Zobacz podręcznik na Wikibooks:
C++

[edytuj] Linki zewnętrzne

Tutoriale


Our "Network":

Project Gutenberg
https://gutenberg.classicistranieri.com

Encyclopaedia Britannica 1911
https://encyclopaediabritannica.classicistranieri.com

Librivox Audiobooks
https://librivox.classicistranieri.com

Linux Distributions
https://old.classicistranieri.com

Magnatune (MP3 Music)
https://magnatune.classicistranieri.com

Static Wikipedia (June 2008)
https://wikipedia.classicistranieri.com

Static Wikipedia (March 2008)
https://wikipedia2007.classicistranieri.com/mar2008/

Static Wikipedia (2007)
https://wikipedia2007.classicistranieri.com

Static Wikipedia (2006)
https://wikipedia2006.classicistranieri.com

Liber Liber
https://liberliber.classicistranieri.com

ZIM Files for Kiwix
https://zim.classicistranieri.com


Other Websites:

Bach - Goldberg Variations
https://www.goldbergvariations.org

Lazarillo de Tormes
https://www.lazarillodetormes.org

Madame Bovary
https://www.madamebovary.org

Il Fu Mattia Pascal
https://www.mattiapascal.it

The Voice in the Desert
https://www.thevoiceinthedesert.org

Confessione d'un amore fascista
https://www.amorefascista.it

Malinverno
https://www.malinverno.org

Debito formativo
https://www.debitoformativo.it

Adina Spire
https://www.adinaspire.com