**C++** estas programlingvo inventita de Bjarne Stroustrup dum la 1980-aj jaroj, kiam li laboris en Bell Labs. Li intencis, ke ĝi estu objektema ido de C, kaj pro tio li unue nomis ĝin "C Kun Klasoj" (angle "C With Classes").

C++ estas preskaŭ plene kongrua kun C. Tradukilo de C++ ofte povas traduki C-programojn, kaj oni povas ligi kaj C-funkciojn kaj C++-funkciojn en unu programo.

La lingvo estas konsiderata kiel plurparadigma programlingvo, ĉar ĝi ebligas programi per pluraj stiloj, ekzemple laŭ ordonema, datumtip-ĝenerala (metaprogramado), modulema aŭ objektema programadoj.

C++ influis la kreadon de aliaj lingvoj, ekzemple Java, C# kaj D. Tamen, el tiuj lingvoj nur C++ subtenas multoblan heredadon (t. e. klaso povas heredi de pli ol unu gepatra klaso).

Dum la 1990-aj jaroj, la programlingvo C++ ekestis unu el la plej uzataj programlingvoj. En 1998, la internacia organizo ISO normigis C++ kiel *ISO/IEC 14882:1998*. La nuna versio de tiu normo estas *ISO/IEC 14882:2003*, kiu nur korektis kaj klarigis detalojn de la programlingvo. Nuntempe, nova normo estas kreata, provizore nomata *C++0x*, kiu ja aldonos plurajn esprimilojn al la programlingvo.

Filozofio
---------

Bjarne Stroustrup projektis C++-on laŭ kelkaj reguloj, kiujn li klarigis en la libro *The Design and Evolution of C++*. Oni povas resumi la filozofion de C++ jene:

* C++ estas projektita kiel statiko-tipigebla programlingvo, ĝeneralcela programlingvo, kiu estas tiel rapida kiel C.
* C++ subtenas plurajn programparadigmojn.
* En C++ la programisto povas libere elekti tion, kion li preferas, eĉ se foje tio ebligas al li fari malbonan elekton.
* C++ estas kongrua kun C, tiom kiom eblas.
* C++ evitas platformspecifajn esprimilojn.
* La esprimiloj, kiujn la programisto ne uzas, ne igas la programon pli malrapida (nek pli granda).
* Oni povas uzi C++-on sen kompleksa programarmedio.

Esprimiloj prezentitaj en C++
-----------------------------

C++ aldonis multajn esprimrimedojn al C. La plej konata estas klasoj, kiuj faciligas objekteman programadon. Per klasoj, oni povas aldoni funkciojn al datumstrukturoj, kaj igi tiujn strukturojn funkcii samkiel simplaj datumtipoj de la lingvo.

Ŝablono (angle *template*) estas la nomo de tre grava novaĵo prezentita de C++. Ŝablonoj unue estis kreitaj simple por ebligi la kreadon de datumstrukturoj, kiuj povas enhavi ian ajn datumtipon. Aliaj lingvoj, ekzemple Ada, jam antaŭe havis tian esprimilon. Poste, oni rimarkis, ke oni povas uzi ŝablonojn por aliaj celoj dum la tradukado de la programo. Ĉar ili ebligas kaj rekursion kaj decidojn, oni povas esprimi ian ajn komputon dum la traduko de la programo, tio estas, antaŭ la lanĉo de la tradukita programo. Tial oni nomas tiun paradigmon metaprogramado.

Krome, C++ aldonis plurajn etajn plibonigojn kompare kun C, ekzemple referencojn, homonimigon de funkcioj, unuliniajn komentojn (kiuj komenciĝas per `//`), la tipon `bool`, la operatorojn `new` kaj `delete`, ktp.

Ekzemplaj programoj
-------------------

Tradicie, la unua programo, kiun oni lernas en ĵus ekkonita programlingvo, estas tre simpla programo, kiu nur montras la tekston "Saluton, mondo!" (angle: "Hello, world!") kaj finiĝas.
Jen tiu programo skribita en C++:

```
#include <iostream> // por havigi std::cout

int main(void)
{
 std::cout << "Saluton, mondo!" << std::endl;
 return 0;
}

```

La linio `return 0;`, kiu finas la programon kun sukcesa kodo (0 signifas sukceson ĉi-okaze), estas laŭ la normo de C++ aŭtomate aldonita al la funkcio `main` (*nur* al `main`), se oni ne uzas ĝin. Iuj preferas uzi ĝin pro stilaj motivoj. La tipo de `main` devas esti ĉiam `int`, eĉ kiam oni ne uzas `return 0;`.

Eksteraj ligiloj
----------------

* Kategorio C++ en la Vikimedia Komunejo (Multrimedaj datumoj)
* C++ en Vikilibroj (Pedagogiaj libroj)

* JTC1/SC22/WG21 - C++ Paĝo de la komitato de la normo de C++ angle
* Thinking in C++ Arkivigite je 2011-11-27 per la retarkivo Wayback Machine Senpaga libro de Bruce Eckel angle
* Boost.org Pluraj bibliotekoj por kunlabori kun la norma biblioteko de C++ angle


|  |  |
| --- | --- |
| Bibliotekoj | * PeEnEo: 650
* GND: 4193909-8
* LCCN: sh87007505
* SUDOC: 029859778
* BNF: 12139768z
* NKC: ph116956
* BNE: XX540250
 |