C++

Programski jezik
(Preusmerjeno s strani C Plus Plus)

Programski jezik C++ (C plus plus; izgovorjava [cé plús plús] je splošnonamenski računalniški programski jezik. V C++ so podatkovni tipi statični, zapis kode je prost. C++ omogoča različne programerske pristope in sicer proceduralno, objektno usmerjeno, generično in funkcionalno .

C++
Logotip C++-a
Paradigmavečparadigmska, objektno orientirana, proceduralna, funkcionalna, generična, modularna
Začetna izdaja1985
OblikovalBjarne Stroustrup
RazvijalecISO/IEC JTC1 / SC22 / WG21
Stabilna izdajaC++20[1]
Tipizacijastatična, nominativna, delno sklepalna
Večje implementacijeGCC, LLVM Clang, MS Visual C++, C++Builder, Intel C++, IBM XL C++, EDG
DialektiCharm++, EC++, R++, μC++
VpliviC, Simula[d], ALGOL 68[d], CLU[d], ML[d] in Ada
Vplival naAda 95, C#, C99, Chapel, Clojure, D, Java, JS++, Lua, Nim, Objective-C++, Perl, PHP, Python, Rust, Seed7
Običajna končnica datoteke.C, .cc, .cpp, .cxx, .c++, .h, .H, .hh, .hpp, .hxx, .h++
Spletna stranhttps://isocpp.org/
DružinaC
Wikibooks logo C++ Programming na Wikibooks
Bjarne Stroustrup, tvorec jezika C++

C++ je razvil danski računalnikar Bjarne Stroustrup, v Bellovih laboratorijih. Razvijati je začel leta 1979 in takrat se je jezik imenoval »C with Classes« (C z razredi). Od 90. let je eden najbolj priljubljenih komercialnih programskih jezikov. Najprej so C-ju dodali razrede, nato med drugim virtualne funkcije, preobložitev operatorjev (operatorski ad-hoc polimorfizem), večkratno dedovanje, predloge in rokovanje z izjemami.

Leta 1998 so sprejeli tudi ISO standard za jezik C++ kot ISO/IEC 14882:1998. Trenutna različica standarda je ISO/IEC 14882:2020 ki nosi neuradno ime C++20.

Jezik uredi

C++ se prevede v strojni jezik kar mu omogoča, da enak program izvaja bistveno hitreje od jezikov, ki se interpretirajo ali pa se prevedejo v vmesni jezik (Java, C#, Python, javascript, PHP ... ). Poleg tega da za isto opravilo program porabi manj časa, porabi tudi manj energije, kar je pomembno za naprave z baterijskim napajanjem. C++ se je razvil iz jezika C in programe napisane v jeziku C je razen nekaterih redkih izjem mogoče brez sprememb prevesti s prevajalnikom za C++.

// Demonstracija najosnovnejšega programa v programskem jeziku C++
#include <iostream>

int main()
{
    std::cout << "Pozdravljen, svet!" << std::endl;
    return 0;
}

Kazalci uredi

Kazalci so najmočnejše orodje v C++. Z njimi se dostopa do pomnilnika, kar omogoča veliko prednosti. Kazalci so v bistvu neke spremenljivke, ki kažejo (referirajo) na drugo spremenljivko ali objekt. V kazalcu je shranjen naslov objekta ali spremenljivke na katero kaže, s tem se izve njegovo vrednost. Kazalec se daklarira tako, da se najprej napiše vrsto spremenljivke na katero referira, znak za kazalec (»*«), nato ime kazalca in še na koncu znak za dodeljevanje (»=«), predznak (»&«) in ime spremenljivke ali objekta na katero referira(glej spodnji zgled). Težava pri kazalcih pa je, da je to izmed najbolj zakompliciranih snovi v C++. Velika prednost kazalcev je, da ko se prenaša argumente v funkcijo, se prenašajo dejansko sami argumenti ne pa kopije teh argumentov kot pri običajni funkciji.

Znaki v zvezi s kazalci:

  • »&« - referenčni kazalec, ki izpiše naslov spremenljivke v RAM-u na katero kaže.
  • »*« - dereferenčni kazalec, ki izpiše vrednost spremenljivke na katero kaže.
  • »->« - objektni kazalec se uporablja pri delo z razredi.

Zgled:

#include <iostream>

int main()
{
    int a = 5; // Inicializacija spremenljivke a z int vrednostjo 5.
    int *b = &a; // Inicializacija int kazalca b z naslovom slpemenljivke a.
    return 0;
}

Podatkovni tipi uredi

V programskem jeziku je več podatkovnih tipov, ki so namenjeni različnim stvarem. Vsi tipi imajo svojo velikost v bitih, kar tudi vpliva na njihovo dolžino. Pri deklaraciji teh tipov si pomagamo z določenimi besedami in tako prilagodimo spremenljivko za določeno delo, te besede lahko tudi medseboj mešamo, da dobimo želeno spremenljivko. Zgledi:

  • short - omeji velikost spremenljivke, tako varčuje prostor v pomnilniku.
  • long - poveča velikost spremenljivke, s tem tudi velikost v bitih, kar zavzame več prostora v pomnilniku.
  • signed - spremenljivka s tem predznakom lahko predstavlja negativna in pozitivna števila. Se ne uporablja saj je vsaka spremenljivka z integralnim podatkovnim tipom privzeto signed. Uporaba signed je torej mnogokrat redundantna razen takrat kadar želimo to povedati eksplicitno.
  • unsigned - spremenljivka s tem predznakom lahko predstavlja samo pozitivna števila, s tem lahko povečamo velikost spremenljivke v pozitivnih številih.

Podatkovni tipi:

Ime Opis Velikost[2] Doseg
Črka ali majhno celo število | 1 bajt | signed: -128 to 127

unsigned: 0 to 255

integer | 4 bajt | signed: -2147483648 to 2147483647

unsigned: 0 to 4294967295

Booleovska vrednost. | 1 bajt | true ali false
Plavajoča vejica | 4 bajt | +/- 3.4e +/- 38 (~7 števk)
Dvakrat natančnejša plavajoča vejica | 8 bajtov | +/- 1.7e +/- 308 (~15 števk)
Več črk v nizu | 2 ali 4 bajt | ena široka beseda

Pogojni stavek uredi

Tudi imenovan: pogojni konstrukt, pogojni izraz ali kontrolni stavek je del programskega jezika, ki na podlagi izraza v oklepaju določi ali se bo koda v pogojnem stavku izvršila ali ne. Koda se izvrši v primeru, če ima izraz v oklepajih vrednost logične 1 (true) drugače se ne izvede.

Prav tako lahko to oznacimo kot 1 za true in 0 za false.

Primer:

int a = 15;
bool check;

if (a == 15)
{
  // Ker je pogoj resničen nastavimo check spremenljivko na true
  check = true;
}
else if (a == 13)
{
    // Pogoj ni pravilen
    check = false;
}
else
{
    // Če ni vrednost ne 15 in ne 13 se izvede ta stavek
    check = false;
    std::cout<<"Vrednost ni ne 13 in ne 15"<<std::endl;
}

Zanke uredi

Zanke so močno orodje v C++ in so večnamenske. Z njimi se rešuje logične in matematične probleme. Poznanih je več vrst zank.

while uredi

Če je pogoj pravilen, se telo funkcije izvaja, dokler pogoj ni več pravilen.

Zgled:

#include <iostream>

int main()
{
    int a = 0;
    int b = 10;

    while(a<b)
    {
        a++; // A se vsakič ko se zanka izvede poveča za 1
        std::cout << a << std::endl; // Izpiše vrednost a
    } 

    return 0;
}

do while uredi

Najprej se enkrat izvede telo zanke, potem pa se šele preveri pogoj. To pomeni da se telo zanke izvede vsaj enkrat tudi, če je pogoj nepravilen.

Zgled:

#include <iostream>

int main()
{
    int a = 1;
    int b = 0;

    do 
    {
        std::cout << "Zanka se izvede čeprav je pogoj napačen" << std::endl;
    } while(a > b);

    return 0;
}

for uredi

Zanka for združuje značilnosti vseh treh zank - »if«, »while« in »do while«. Zanka najprej deklarira neko spremenjlivko (lahko tudi ne), potem se preveri pogoj in še nato se lahko izvede neka pravilna matematična operacija (s tem si pomagajo, da spremljajo kolikokrat se zanka izvede).

Zgled:

#include <iostream>

int main()
{
    int a = 10;
    for (int i; i < a; i++) // i se povečuje in pri tem se izpisuje njegova vrednost 
        std::cout << i << std::endl;

    return 0;
}

Razredi uredi

Eden od glavnih konceptov programskega jezika C++ so razredi. To so razširjene podatkovne strukture, ki vsebujejo podatke in funkcije. Upravljanje z razredi spada pod eno najpomebnejših vej C++, pod objektno usmerjeno programiranje. Iz tega izhaja tudi ime programskega jezika C++ »C with classes« (C z razredi). Ko deklariramo objekt enega razreda, govorimo o primeru tega razreda. Saj ima ta primer vse značilnosti in funkcije tega razreda. Razredi po navadi vsebujejo glavo (.h), v katerem so deklarirani vsi člani tega razreda in njegove funkcije. Nato pa še v drugi datoteki implementacijo razreda (.cpp). Ta se potem lahko vključi v glavni program tj. »main.cpp«, da ga lahko uporabljamo. To omogoči lahkotno upravljanje z objekti, izmenjevanje knjižnic z drugimi programerji in povečevanje produktivnosti, se pravi manj kode za večji rezultat.

V C++ je ogromno knjižnic za posebne namene. Med najbolj znane knjižnice spadajo:

  • <iostream> - knjižica za branje in pisanje na standardni vhod/izhod
  • <stdio.h> - knjižica, kjer so definirane nekatere pogosto uporabljene funkcije
  • <vector> - knjižica, ki omogoča uporabo dinamične podatkovne strukture Vektor
  • <string> - knjižica kjer je definiran razred string, ki omogoča višji nivo abstrakcije za delo z nizi
  • <Qt> - framework za grafične uporabniške vmesnike

Sklici uredi

  1. ISO/IEC 14882:2020 Programming languages — C++ — 2020.
  2. Ta velikost velja za 32-bitne operacijske sisteme

Viri uredi

  • Žumer, Viljem; Brest, Janez (2004). Uvod v programiranje in programski jezik C++. Maribor: FERI. COBISS 53383169. ISBN 86-435-0636-2.
  • Juvan, Martin; Zaveršnik, Matjaž (2000). Vaje iz programiranja: C, C++ in Mathematica. Ljubljana: Študentska založba. COBISS 109207552. ISBN 961-6356-29-1.

Zunanje povezave uredi

(slovensko)
(angleško)