-2 *Latinitas huius rei dubia est. Corrige si potes. Vide {{latinitas}}.*

*Vide etiam paginam fere homonymam:* C

**C++** est altioris gradus lingua programmandi quam annis 1980s Bjarne Stroustrup e lingua C creavit. Hac cum lingua obiecta spectante programmata contortuliora modo generaliori faciliorique scribi et compilari possunt, et, ob originem in C, omnia programmata C paene sine mutatione in C++ compilari etiam possunt.

Salve, munde!
-------------

Hic textus monstrat programma minimum, quod "Salve, munde!" in monitorium mittit.

```
// quod iussum obiectum std::cout praebet
#include <iostream>
 
int main()
{
 std::cout << "Salve, munde!" << std::endl;
}

```

Historia
--------

Stroustrup, cum apud Societatis AT&T Bell Laboratoria laborare coeperet, problema datur ut nucleus UNIX respectu? computationis distributatae aestimet. Experientia eius studiorum PhD memoria tenente, Stroustrup linguam C adiunctis linguae Simulae meliorare proficiscitur. C selegit propterea quod ad omnia adhiberi potest, celeris portabilisque est, et in usu commni erat. Etiam eo tempore animatus erat ab linguis ALGOL 68, Ada, CLU et ML. 

Annos postquam linguam primum elaborare incepit, anno 1998 norma linguae C++ sancta est designatione ISO/IEC 14882:1998. Illa norma usque hodie vim habet, sed enmendata est anno 2003 ab Corrigendo Technico ISO/IEC 14882:2003 designatio. Proxima versio normalis affabiliter C++0x nuncupata usque hodie elaboratur.

Natura
------

C++ plurimam linguae C syntaxim et praeprocessorium accepit. Lingua autem undecim res additionales praebet quae laborem programmatorum meliorant:

* Dictum `//`, quo post in singula linea possumus reddere commentationes
* Dictum `const`, quo constantes alphanumerici definiri possunt
* Dictum `inline`, quo functiones singulae lineae definiri possunt
* Declarationes quae ubique possunt poni
* Referentias et operatorem referentialem `&`
* `new` et `delete`, quae facile sinunt variabilium memoriam allocare et deallocare
* Obiectorum usum lingua re vera sustinet, classes veras praebens, quibus programmatores possunt definire nova genera variabilium programmatis aptorum, et functiones eorum (quae *methodi* appellantur).
	+ Constructores, destructores, operatores, methodosque a programmatoribus definitas
	+ Incapsulationem, ubi dictis `private`, `public`, `protected` programmatores possunt decernere variabiles secretos et methodos quibus hi variabiles legi, adhiberi vel commutari possint,
	+ Hereditatem, ubi novae classes possunt heriditare variabiles et functiones ex classe antea definita
* Superpositiones (Anglice: *Overloading*) operatorum mathematicorum et aliorum functionum, ubi programma continue decernit methodum applicabilem iuxta datum variabilium genus

### Classes et obiecta

C++ ad C syntaxim linguarum obiecta spectantium introduxit. Classibus cum definiuntur praebentur : abstractio, incapsulatio, hereditas, polymorphismus, et superpositio. Classis ita cogitari potest ut forma ex qua obiecta individua cudantur cum programma operatur. Classis definita idem ac int aut float in programmate fungit, et obiecta declarata idem ac variabiles huius classis. Classes igitur sinunt programmatores omnino nova genera variabilium definire et adhibere quae similia sunt int, float, etc.

Exemplum programmatis infra datum monstrat syntaxim qua classes declaruntur, et quo modo obiecta adhibentur in parte principali programmatis `main()`.

```
#include <iostream>
#include <cstring>
using namespace std;

class persona
{
public: //haec data et functiones publice commutari et haberi possunt
 string nomen;
 int aetasData();

 persona();
private: //haec data et functiones sola per methodos huius classis commutari et haveri possunt
 int annusPraesens = 2013;
 int annusNatalis;
 int aetas;
 void aetatemPonere();
};

void persona::aetatemPonere() //Sola hac methodo aetas personae poni potest
{
cout<<"Quo anno natus est?";
cin>>annusNatalis;
aetas= 2013-annusNatalis;
}

int persona::aetasData() //Sola hac methodo aetas personae dari potest
{
return aetas;
}

persona::persona() //Hic est classis constructor
{
cout<<"Nomen?";
cin>>nomen;
aetatemPonere();
}

int main()
{
persona Maria;
persona \*Caesar = new persona;

cout<<Maria.nomen<<" "<<Maria.aetasData()<<endl;
cout<<Caesar->nomen<<" "<<Caesar->aetasData()<<endl;
}

```

Nexus interni
-------------

* C
* D
* GCC
* Perl

Bibliographia
-------------

* Commentarius ex Encyclopaedia Britannica