C++

 

Język C++ jest jednym z najpopularniejszych języków programowania ogólnego przeznaczenia, zarówno w zastosowaniach komercyjnych, jak i hobbystycznych.

  

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ą przenaszalne poza ich obręb, co wynika z faktu, że takie interfejsy są specyficzne dla dane 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 komercyjne, jak i typu Open Source. 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 IEC14882:2003) z 2003 r.

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

 Właściwości języka

Historia

Język C++ został stworzony w latach osiemdziesiątych XX wieku 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.

 Przykładowe programy

Najmniejszy możliwy program wygląda tak:

int main(){}

Jest to już w pełni poprawny program w języku C++, który nie wykonuje żadnego działania. Poniższy natomiast wyświetla napis "Hello world!":

#include <iostream> // deklaracje obiektów std::cout i std::endl
 
int main() // funkcja main
{
   std::cout << "Hello world!" << std::endl; /* wprowadzenie tekstu na ekran (wraz z przejściem do następnej linii) */
   return 0;
}

std::cout i std::endl oznacza, że elementy cout i endl znajdują się w przestrzeni nazw std. Deklarację używania przestrzeni std można umieścić na początku programu: using namespace std;

#include <iostream> // deklaracje std::endl i std::ostream 
using namespace std;
 
int main() // funkcja main
{
   cout << "Hello world!" << endl; // wprowadzenie tekstu na ekran
   return 0;
}

Prosty kalkulator:

#include <iostream>
using namespace std;
 
int main(int argc, char *argv[])  // argc - liczba argumentów podanych przy uruchomieniu,
{                                 // argv[] - tablica argumentów — łańcuchów typu (char *)
    double a, b, wynik;
    int dzialanie;
    
    cout << "Wybierz dzialanie :" << endl << "1. Dodawanie" << endl << "2. Odejmowanie" << endl
         << "3. Mnozenie" << endl << "4. Dzielenie" << endl << endl 
         << "Wybierz inna liczbe aby wyjsc" << endl << endl;
    cin >> dzialanie;
    
    switch (dzialanie) {  // instrukcja warunkowa sprawdzająca wartość zmiennej w nawiasach
           case 1:
                cout << endl << "Podaj składniki :" << endl;
                cin >> a >> b;
                wynik = a + b;
                break;
           case 2:
                cout << endl << "Podaj odjemna i odjemnik :" << endl;
                cin >> a >> b;
                wynik = a - b;
                break;
           case 3:
                cout << endl << "Podaj czynniki :" << endl;
                cin >> a >> b;
                wynik = a * b;
                break;
           case 4:
                cout << endl << "Podaj dzielna i dzielnik :" << endl;
                cin >> a >> b;
                wynik = a / b;
                break;
           default:     // dowolny, niewyszczególniony przedtem przypadek
                cout << endl << "Koniec programu." << endl;
                wynik = 0;
    }
 
    cout << endl << "Wynik wynosi " << wynik << endl << endl;
 
    // Poniższe dwie linie potrzebne są tylko w systemach z rodziny Windows,
    // aby zapobiec zamknięciu okna konsoli zaraz po zakończeniu programu:
    cin.ignore();
    cin.get();
 
    return 0; // Wysłanie do systemu informacji o pomyślnym zakończeniu programu.
}

 Nowe cechy języka C++ (względem języka ANSI C)

Niektóre z nich trafiły do języka C, najpierw nieoficjalnie, później zaś zostały ustandaryzowane w C99, IEC14882:1998, IEC14882:2003. Aktualne wypracowywany jest nowy standard, który opisano w roboczym dokumencie [3]