C ++

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
C ++
limbaj de programare
ISO C ++ Logo.svg
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 , autorul limbajului.

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ă

  1. ^ Stroustrup: FAQ , la public.research.att.com . Adus la 22 aprilie 2006 (arhivat din original la 16 iulie 2012) .
  2. ^ Bjarne Stroustrup, „Note către cititor” , în C ++ - Limbaj, Biblioteca de standarde, Principii de programare , Addison-Wesley, 2000.
  3. ^ STLport: Bine ați venit! , pe stlport.org .
  4. ^ C ++ ABI , la mentorembedded.github.io . Adus pe 7 mai 2018 .

Bibliografie

  • 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

linkuri externe

Controllo di autorità LCCN ( EN ) sh87007505 · GND ( DE ) 4193909-8 · BNF ( FR ) cb12139768z (data) · BNE ( ES ) XX540250 (data)
Informatica Portale Informatica : accedi alle voci di Wikipedia che trattano di informatica