C ++
C ++ limbaj de programare | |
---|---|
Autor | Bjarne Stroustrup |
Data de origine | 1983 |
Ultima versiune | C ++ 20 (decembrie 2020) |
Utilizare | Generic |
Paradigme | Multi-paradigmă, procedurală , funcțională , orientată spre obiect |
Tastare | Static |
Extensii comune | .h .hh .hpp .hxx .h ++ .cc .cpp .cxx .c ++ |
Influențată de | C , Obiectiv-C , Simula , ALGOL , Ada , CLU , ML |
A influențat | Java , C # , Python , Rust , Perl , PHP |
Implementare referință | |
Site-ul web | isocpp.org/ |
În informatică C ++ este un limbaj de programare cu scop general dezvoltat inițial de Bjarne Stroustrup în Bell Labs în 1983 ca o evoluție a limbajului C prin inserarea programării orientate pe obiecte ; de-a lungul timpului a avut evoluții semnificative, cum ar fi introducerea abstractizării în ceea ce privește tipul.
Limbajul a fost standardizat în 1998 ( ISO / IEC 14882 : 1998 "Tehnologia informației - Limbaje de programare - C ++", actualizat în 2003 ). C ++ 11 , cunoscut și sub numele de C ++ 0x , este standardul care înlocuiește revizuirea din 2003. După o revizuire minoră în 2014, cea mai recentă versiune a standardului (cunoscută informal sub numele de C ++ 17 ) a fost lansată în 2017.
Istorie
Bjarne Stroustrup a început să lucreze la limbă în 1979 . Ideea de a crea un nou limbaj a luat naștere în experiențele sale de programare din timpul realizării tezei sale de licență. Stroustrup a descoperit că Simula avea caracteristici utile pentru dezvoltarea de proiecte software mari, dar limbajul era prea lent pentru utilizarea practică, în timp ce BCPL era rapid, dar prea scăzut pentru dezvoltarea de aplicații mari. Când Stroustrup a început să lucreze la Bell Labs, i s-a dat sarcina de a analiza nucleul Unix în domeniul procesării distribuite . Amintindu-și lucrările tezei, el a decis să adauge câteva dintre caracteristicile Simulei în limbajul C. C a fost ales pentru că era un limbaj de uz general rapid și portabil . În plus față de C și Simula, a fost inspirat din limbaje precum ALGOL 68 , Ada , CLU și limbajul ML . Inițial, caracteristicile clasei , clasei derivate , verificarea strictă a tipului și argumentul implicit au fost adăugate la C cu Cfront . Prima versiune comercială a fost lansată în octombrie 1985 . [1]
În 1983 numele limbii a fost schimbat din „C cu clase” în C ++. Au fost adăugate noi caracteristici, inclusiv funcții virtuale , supraîncărcare a funcțiilor și operatorilor, referințe , constante, controlul utilizatorului asupra gestionării memoriei, verificare îmbunătățită a tipului și comentarii în noul stil („//”). În 1985, a fost publicată prima ediție a Limbajului de programare C ++ , care a furnizat un ghid important de referință pentru limbaj, care nu fusese încă standardizat oficial. În 1989, a fost lansată versiunea 2.0 a C ++, ale cărei noi caracteristici includ moștenirea multiplă , clase abstracte , funcții de membru static , funcții de membru const și membri protejați . În 1990, a fost publicat Manualul de referință C ++ adnotat , care a oferit fundamentul viitorului standard. Ultimele adăugiri de caracteristici includ șabloane , excepții , spații de nume , noi tipuri de distribuție și tipul de date boolean .
La fel ca limba, biblioteca standard a evoluat, de asemenea. Prima adăugire la biblioteca standard C ++ a fost biblioteca de fluxuri I / O care furniza servicii de înlocuire pentru biblioteca tradițională C (cum ar fi printf și scanf ). Mai târziu, una dintre cele mai semnificative adăugiri a fost Biblioteca de șabloane standard .
După ani de muncă, un comitet cu membri aiANSI și ISO a standardizat C ++ în 1998 ( ISO / IEC 14882 : 1998 ). Câțiva ani după publicarea oficială a standardelor, comitetul a urmat dezvoltarea limbii și a publicat o versiune corectată a standardului în 2003 .
Un raport tehnic datează din 2005 , numit „Raport tehnic 1” (prescurtat TR1) care, deși nu face parte oficial din standard, conține o serie de extensii la biblioteca standard C ++ 11 .
Nu există un proprietar al limbajului C ++, care poate fi implementat fără a plăti redevențe. Cu toate acestea, documentul de standardizare în sine este disponibil doar contra cost.
Geneza numelui
Pronunția lui C ++ este [ˌsiː plʌs ˈplʌs] (în engleză). Numele a fost sugerat de Rick Mascitti la mijlocul anului 1983 , când limba a fost folosită pentru prima dată în afara centrelor de cercetare. Anterior limba se numea „C cu cursuri”. Numele este un joc de cuvinte cu un construct C (unde semnul dublu plus este operatorul de autoincrementare, care crește valoarea unei variabile cu una), împreună cu convenția comună de a adăuga un semn plus pentru a indica o versiune îmbunătățită. Conform lui Stroustrup: «++ este operatorul de creștere al lui C [...] numele exprimă natura evolutivă a modificărilor de la C» . Folosirea jocului de cuvinte evită, de asemenea, problema că „C +” a fost deja utilizat pentru un limbaj fără conexiune la C ++ (ca să nu mai vorbim că este asociat în mod obișnuit cu o evaluare puțin mai mult decât suficientă într-o performanță academică).
Când, în 1992, a fost întrebat în mod informal despre nume, Rick Mascitti a explicat că a făcut sugestia cu un spirit goliardic și că nu credea că va deveni numele formal al limbii. Stroustrup a sugerat, de asemenea, a posteriori o interpretare orwelliană a numelui, referindu-se la Newspeak „Dicționarul C” - în roman dicționarul de termeni tehnici, singura rămășiță a unui limbaj științific - descris în apendicele din 1984 și prefixul doubleplus ( archipiù în ediția italiană), folosită în Newspeak pentru superlativ. Deși nu este foarte fidel sintaxei fictive definite în roman cu o precizie extremă, numele ar suna ca „C-issimo” și ar conota în continuare C ++ ca o îmbunătățire intensă a lui C. [2]
Descriere
Biblioteca standard
1998 ++ C Standardul este format din două părți: miezul limbii și biblioteca standard ; acesta din urmă include cea mai mare parte a Standard Template Library (STL). Există multe biblioteci pentru C ++ care nu fac parte din standard și este posibil, utilizând legături externe, să se utilizeze și biblioteci scrise pentru limbajul C. STL a fost inițial o bibliotecă terță parte, dezvoltată de HP și ulterior de Silicon. Grafică , înainte de a fi încorporată în C ++ standard. Standardul nu se referă la acesta ca „STL”, deoarece face parte pur și simplu din biblioteca completă, dar mulți continuă să folosească termenul pentru a-l distinge de restul bibliotecii (cum ar fi fluxurile I / O, internaționalizarea, diagnosticarea funcții etc.).
Majoritatea compilatoarelor oferă, de asemenea, o implementare a bibliotecii standard, inclusiv STL. Există, de asemenea, versiuni independente de compilator ale STL, cum ar fi STLPort . [3]
Compilatoare
Unele compilatoare pentru C ++ sunt: GCC (cross-platform), Clang (disponibil pentru multe platforme diferite), MinGW ( portul GCC pentru Windows ), DJGPP și TerzC ++ Compiler . Pe lângă acestea există compilatoare comerciale precum VisualC ++ , Embarcadero Delphi , C ++ Builder (inițial realizat de Borland ). Pe sistemul de operare macOS , puteți utiliza programul Xcode .
Standardul C ++ nu specifică implementarea decorării numelor, gestionarea excepțiilor și alte funcții specifice implementării, ceea ce face incompatibil codul obiect produs de diferite compilatoare. Cu toate acestea, există standarde ale unor terțe părți pentru anumite mașini sau sisteme de operare care încearcă să standardizeze compilatoarele pentru astfel de platforme, cum ar fi ABI pentru C ++ [4] , iar multe compilatoare au standardizat aceste elemente de atunci.
De mulți ani, diferite compilatoare au implementat standardul C ++ cu diferite niveluri de corectitudine, în special specializarea parțială a șabloanelor . Versiunile recente ale compilatoarelor populare acceptă aproape toate standardele C ++ din 1998.
Exemple de programe (derivate din C)
Salut Lume!
Exemplu al programului hello world care folosește biblioteca standard C ++ (nu STL), fluxul de ieșire cout pentru a afișa un mesaj și se termină, returnând („return”) o valoare funcției de apelare, în acest caz sistemul de operare care a lansat programul.
// intrare bibliotecă de ieșire (pentru cout și endl)
#include <iostream>
// utilizați spațiul de nume standard (pentru a evita punerea std :: înainte
// fiecare afirmație)
folosind spațiul de nume std ;
int main ()
{
cout << "Hello World!" << endl ;
// returnează valoarea programului
retur 0 ;
}
Diferența zecimalelor
Program simplu care cere utilizatorului să introducă două zecimale, face diferența și afișează rezultatul.
C ++ (precum și C la standardul C99 ) implementează comentarii cu o singură linie printr-o bară dublă: // . Pentru comentariile pe mai multe linii, se folosește aceeași sintaxă ca și pentru C, adică: / * (comentariu) * / .
#include <iostream> // pentru std :: cout, std :: cin și std :: endl
folosind spațiul de nume std ;
int main ()
{
// Puneți șirul pe fluxul de ieșire standard (imprimați
// mesaj pe ecran) std :: endl, pe lângă inserarea unei linii noi pe
// flux, spălați și tamponul
cout << "scrie numărul zecimal" >>
// Definiția unei variabile și tipul acesteia (zecimal)
// Nu contează că definițiile sunt la începutul blocului de cod
int numărul1 ;
// Citiți din fluxul de intrare standard al unei zecimale de stocat
// variabila „număr1”
cin >> număr1 ;
cout << "Introduceți un alt număr zecimal" << endl ;
int numărul2 ;
cin >> număr2 ;
// Variabila „diferență” este inițializată cu diferența numerelor citite
int diferență = număr1 - număr2;
cout << diferență << endl ;
retur 0 ;
}
Număr mai mare
Programul cere utilizatorului mai multe numere și arată cel mai mare dintre cele introduse (întrerupând execuția atunci când este introdus un număr negativ sau nul). În plus față de int , C ++ folosește și float pentru a declara atât variabile întregi, cât și non-întregi.
#include <iostream>
folosind spațiul de nume std ;
int main ()
{
plutitor m ( 0,0 );
plutitor x ;
do
{
cout << "Introduceți un număr pozitiv (negativ sau nul pentru a ieși):" ;
cin >> x ;
dacă ( x > m )
m = x ;
} while ( x > 0,0 );
cout << "Numărul major a fost" << m << endl ;
retur 0 ;
}
Suma primelor n numere naturale
Exemplu de program care, după introducerea unui număr n, calculează și imprimă suma primelor n numere naturale.
// Intrare bibliotecă de ieșire
#include <iostream>
folosind spațiul de nume std ;
int main ()
{
int n ; // Declarația variabilei n
int sumă = 0 ; // Declar variabila care va conține suma și o setez la 0
cout << "Introduceți numărul:" ;
cin >> n ; // citiți valoarea lui n de la tastatură
for ( int i = 0 ; i < n ; i ++ ) // pentru i variind de la 0 la n
sum = sum + i ; // adăugați i la suma totală
cout << "Suma primului" << n << "numerele naturale este:" << sum << endl ;
retur 0 ;
}
Aria unui dreptunghi
Calculul suprafeței unei figuri plate, cum ar fi dreptunghiul, este subexpus aici:
#include <iostream>
folosind spațiul de nume std ;
int main ()
{
bază plutitoare , înălțime , zonăRectangle ;
cout << "Acest program calculează aria unui dreptunghi." << endl ;
cout << "Cât valorează baza?" ;
cin >> baza ;
cout << "Cât este înălțimea?" ;
cin >> inaltime ;
areaRectangle = bază * înălțime ;
cout << "Zona este:" << areaRettangolo << endl ;
retur 0 ;
}
Definiția Class
#include <iostream>
folosind spațiul de nume std ;
Mesaj de clasă
{
public:
Mesaj ( șir const și subiect , șir const și de la ) :
subiect_ ( subiect ), din_ ( din )
{}
șir const & getSubject () const { returnare subiect_ ; }
șir const & getFrom () const { return from_ ; }
privat :
string subject_ ;
șir din_ ;
};
O utilizare simplă a clasei nou definite și implementate poate fi:
#include <iostream>
folosind spațiul de nume std ;
int main ()
{
// Inițializarea unei instanțe a clasei Message
Mizerie Mesaj ( "Salutări", "Goofy");
// Salutări de la Pippo
cout << mizerie . getSubject () << "din" << mess . getFrom ();
retur 0 ;
}
Generator de numere aleatorii
În exemplu, se utilizează algoritmul Mersenne Twister . Obiectul device
, pe sistemele Unix, va citi valorile din /dev/random
, obiectul random_algorithm
este inițializat cu o valoare aleatorie citită de pe device
. Obiectul random_generator
, care va fi folosit în cele din urmă pentru a genera numărul aleatoriu dorit, va profita de entropia obținută apelând random_algorithm()
și va asigura că produceți valori în intervalul specificat în construcție.
#include <iostream>
#includeți <aleatoriu>
folosind spațiul de nume std ;
int main ()
{
// Inițializați generatorul de numere aleatorii
dispozitiv aleatoriu ;
// Inițializați algoritmul de generare a numerelor aleatorii Mersenne Twister
// 19937
mt19937 random_algorithm ( device ());
// Inițializați un obiect care va produce numere întregi aleatoare de la 0 la 100 cu
// probabilități uniforme
uniform_int_distribution < int > random_generator ( 0 , 100 );
// Alocați variabila „aleatorie” unui număr aleatoriu
int random = random_generator ( random_algorithm );
// Raportați numărul aleatoriu generat
cout << "Număr aleatoriu generat:" << aleatoriu ;
// Ieșire:
// Număr aleatoriu generat: [0, 100]
retur 0 ;
}
În acest caz, programul generează un număr aleatoriu între 100 și 0.
Pentru buclă
#include <iostream>
folosind spațiul de nume std ;
int main ()
{
for ( int number = 1 ; number < 10 ; number ++ )
{
// Raportați numărul
cout << "Number:" << number << endl ;
// Ieșire:
// "Numărul 1"
// "Numarul 2"
// „Număr: 3”
// „Număr: 4”
// „Număr: 5”
// „Număr: 6”
// „Număr: 7”
// „Număr: 8”
// „Număr: 9”
}
retur 0 ;
}
Atâta timp cât numero
este mai mic de 10, programul continuă să repete șirul Numero: 1
incrementând valoarea numero
cu unul.
Controlul intrării
Un construct des întâlnit în programarea C ++ este:
do
{
// ...
} while ( condiție );
folosit pentru a repeta execuția unei părți a programului dependentă de o anumită condiție, menționată în timp.
Construcția do-while implică faptul că bucla este executată cel puțin o dată , deoarece condiția este testată la sfârșitul corpului de instrucțiuni specificat de do.
Utilizarea single-ului while implică în schimb că bucla nu poate fi executată niciodată, dacă se constată că condiția nu este verificată imediat.
Program: date două numere și un operator (+ - * /) calculează rezultatul:
#include <iostream>
#include <limits>
folosind spațiul de nume std ;
int main ()
{
dublu a , b , r ;
// Inserare intrare: operanzi și semn
char s ;
cout << "Introduceți primul operand:" ;
cin >> to ;
cout << " \ n Introduceți al doilea operand:" ;
cin >> b ;
cout << " \ n Introduceți un semn:" ;
do
{
cin >> s ;
if ( s ! = '+' && s ! = '-' && s ! = '*' && s ! = '/' )
{
cerr << " \ n Eroare: semn incorect." << endl ;
cout << "Introduceți un semn:" ;
}
//! = înseamnă „nu este egal cu”, && corespunde AND boolean
} while ( s ! = '+' && s ! = '-' && s ! = '*' && s ! = '/' );
// Calculul rezultatului, pe baza semnului introdus
comutator ( i )
{
cazul '+' :
r = a + b ;
pauză ;
caz '-' :
r = a - b ;
pauză ;
cazul '*' :
r = a * b ;
pauză ;
implicit : // În cazul în care nu apare niciuna dintre condițiile de mai sus ...
r = a / b ;
}
cout << " \ n Rezultatul" << ( char ) 0x8a << ":" << r << endl ;
// 0x8a indică caracterul ASCII 8A (138 în hexazecimal) sau „e” cu
// accentul grav (è) (char) între paranteze indică o operație de turnare,
// conversie forțată.
cin. ignora ( numeric_limits < streamsize > :: max (), '\ n' );
cin. get ();
retur 0 ;
}
În acest caz, declarația do
fost utilizată pentru a împiedica programul să continue execuția cu o valoare incorectă a parametrului s
.
Scrierea fișierelor:
Programul prezentat mai jos creează un fișier numit „test.txt” și scrie „Hello world” în el
// Pentru cout
#include <iostream>
// Pentru gestionarea fișierelor
#include <fstream>
// Pentru a evita scrisul
// std :: cout, std :: end, std :: ofstream
folosind spațiul de nume std ;
// Functie principala
int main ()
{
cout << "Deschiderea fișierului" << endl ;
// Inițializați clasa ofstream
// Dând ca parametru constructorului
// Numele fișierului de creat
fișier ofstream ( "test.txt" );
cout << "Scrie fișier" << endl ;
// Scriu în fișier
fișier << "Hello world" ;
cout << "Închideți fișierul" << endl ;
// Închideți fișierul
dosar . close ();
retur 0 ;
}
Notă
- ^ Stroustrup: FAQ , la public.research.att.com . Adus la 22 aprilie 2006 (arhivat din original la 16 iulie 2012) .
- ^ Bjarne Stroustrup, „Note către cititor” , în C ++ - Limbaj, Biblioteca de standarde, Principii de programare , Addison-Wesley, 2000.
- ^ STLport: Bine ați venit! , pe stlport.org .
- ^ C ++ ABI , la mentorembedded.github.io . Adus pe 7 mai 2018 .
Bibliografie
- ( EN ) Bjarne Stroustrup , Limbajul de programare C ++ , Addison-Wesley, ISBN 978-0-201-70073-2 .
- Bjarne Stroustrup, C ++. Limbaj, Biblioteca standard, Principii de programare , Pearson, 2015, p. 1279, ISBN 978-88-6518-448-6 .
- Agostino Lorenzi, Marco Ambrosini, Sara Foresti, Programare orientată pe obiecte și limbaj C ++ , Atlas, 2004, p. 384, ISBN 978-88-268-1195-6 .
- Harvey M. Deitel, Paul J. Deitel, C ++. Fundamentele programării , Apogeo, 2014, p. 768, ISBN 978-88-387-8571-9 .
- Andrea Domenici, Graziano Frosini, Introducere în programare și elemente ale structurilor de date cu limbajul C ++ , Franco Angeli Editore, 2013, p. 480, ISBN 978-88-464-6202-2 .
Elemente conexe
Alte proiecte
- Wikibooks conține texte sau manuale pe C ++
- Wikiversitatea conține resurse pe C ++
- Wikimedia Commons conține imagini sau alte fișiere pe C ++
linkuri externe
- ( EN ) Pagini ale comitetului de standardizare: JTC1 / SC22 / WG21 - C ++ , pe open-std.org .
- ( EN ) Lista întrebărilor frecvente menținută de Bjarne Stroustrup
- (EN) cplusplus.com - Rețeaua de resurse C ++ , pe cplusplus.com. Adus la 27 iunie 2020 (Arhivat din original la 22 aprilie 2020) .
- Lecții despre C ++ ale CNR din Bologna , pe bo.cnr.it.
- Ghid pentru utilizarea C ++ de la HTML.it , pe programare.html.it .
Controllo di autorità | LCCN ( EN ) sh87007505 · GND ( DE ) 4193909-8 · BNF ( FR ) cb12139768z (data) · BNE ( ES ) XX540250 (data) |
---|