C++
Gjuha e shpejtë që mësohet në shumë gjimnaze e fakultete, dhe që qëndron pas lojërave, shfletuesve dhe garave të programimit. · 54 terma
#include
#include i thotë kompajlerit ta fusë një skedar tjetër në kodin tënd para se ta përkthejë — zakonisht një librari si <iostream> ose <vector>, ose një header tëndin si "loja.h". Pa të, s'mund t'i përdorësh ato funksione.
Address-of (&) and dereference (*)
Adresa dhe vlera e pointer-itTe pointer-ët, & e merr adresën e një variable në memorie, ndërsa * shkon te ajo adresë dhe merr (ose ndryshon) vlerën që gjendet aty. int* p = &x; do të thotë „p mban adresën e x-it“.
Arduino
Arduino-ja është një pllakë e vogël elektronike që e programon me një version të thjeshtë të C++ për të kontrolluar drita, motorë dhe sensorë. Është mënyra më e njohur për të filluar me robotikë dhe pajisje „smart“ në shkollë.
Arrays in C++
Vargjet në C++Një varg (array) në C++ mban një numër të fiksuar elementesh të të njëjtit tip, njëri pas tjetrit në memorie. Madhësia vendoset që në fillim dhe s'ndryshon, dhe C++ nuk të ndal po dole jashtë kufijve — ndaj shpesh përdoret vector-i.
auto (C++)
auto i thotë kompajlerit „gjeje vetë tipin nga vlera“. Ndihmon sidomos kur tipi është i gjatë, si te iteratorët. Tipi mbetet i fiksuar — thjesht s'ke pse e shkruan.
C++
C++ është një gjuhë programimi shumë e shpejtë, që të jep kontroll të madh mbi kompjuterin dhe memorien. Përdoret për lojëra video dhe programe që duhet të jenë shumë të shpejta, dhe shpesh mësohet në gjimnaz e fakultet.
C++ data types (int, double, char, bool)
Tipet e të dhënave në C++Në C++ çdo variabël duhet ta ketë tipin e shkruar: int për numra të plotë, double për numra me presje, char për një shkronjë, bool për true/false, dhe long long për numra shumë të mëdhenj. Tipi vendos sa memorie zë variabla.
C++ IDEs (Code::Blocks, Visual Studio)
IDE për C++Për C++ përdoren shpesh Code::Blocks dhe Dev-C++ (sidomos në shkolla), Visual Studio në Windows, CLion ose VS Code me shtojca. Ato e kanë kompajlerin dhe debugger-in brenda, që ta ekzekutosh programin me një klik.
C++ standards (C++11, C++17, C++20)
Versionet e C++C++ përditësohet çdo tre vjet me një version të ri. C++11 e ndryshoi gjuhën shumë (auto, lambda, smart pointers) dhe quhet fillimi i „C++ modern“; C++17 dhe C++20 shtuan edhe më shumë. Me -std=c++20 i thua kompajlerit cilin version të përdorë.
class & struct (C++)
Klasat dhe struct-et në C++Në C++ i krijon tipet e tua me class ose struct. Janë pothuajse njësoj; i vetmi dallim është se te struct gjithçka është public si parazgjedhje, ndërsa te class private. Zakonisht struct përdoret për të dhëna të thjeshta.
CMake & Makefile
Kur projekti ka shumë skedarë, s'i kompajlon me dorë: Makefile-i ose CMake-u i shkruajnë një herë hapat e ndërtimit, dhe pastaj mjafton një komandë. CMake-u është standardi i sotëm për projektet C++ — si Maven-i për Java-n.
Competitive programming
Programimi garuesProgramimi garues janë garat ku zgjidh probleme algoritmike sa më shpejt dhe me kod sa më efikas — si olimpiadat e informatikës, Codeforces ose ICPC. C++ është gjuha më e përdorur aty, falë shpejtësisë dhe STL-së.
Compiling & linking
Kompajlimi dhe lidhjaNjë program C++ ndërtohet në dy hapa: kompajleri e përkthen çdo skedar .cpp në kod makine (skedar .o), pastaj linker-i i bashkon të gjithë në një program të ekzekutueshëm. Gabimi „undefined reference“ vjen nga linker-i: ke deklaruar një funksion, por s'e ke shkruar askund.
const in C++
const në C++const do të thotë „kjo s'ndryshon“. Me const int MAX = 100; krijon një konstante, dhe me const std::string& emri një funksion e merr tekstin pa e kopjuar dhe pa e ndryshuar. constexpr shkon më larg: llogaritet që gjatë kompajlimit.
Constructor & destructor (C++)
Konstruktori dhe destruktoriKonstruktori ekzekutohet kur krijohet një objekt, dhe destruktori (~EmriKlases) kur objekti zhduket. Destruktori është vendi për të pastruar — p.sh. të mbyllësh një skedar ose të lirosh memorie.
Copy constructor & rule of three
Konstruktori i kopjimitKonstruktori i kopjimit vendos çfarë ndodh kur krijon një objekt si kopje të një tjetri. Nëse klasa jote menaxhon memorie me pointer-ë, kopja e paracaktuar kopjon vetëm adresën — dhe dy objekte e fshijnë të njëjtën memorie. „Rregulli i treve“ thotë: po shkrove destruktor, shkruaj edhe kopjimin dhe caktimin.
cout & cin (iostream)
cout dhe cincout dhe cin janë mënyra si një program C++ flet me përdoruesin: cout << shfaq tekst në ekran, ndërsa cin >> lexon atë që shkruan përdoruesi. Të dyja vijnë nga libraria <iostream>.
enum class
enum class krijon një tip me një listë të fiksuar vlerash me emër — p.sh. Ngjyra::Kuqe. Ndryshe nga enum-i i vjetër, emrat s'përzihen me pjesën tjetër të kodit dhe s'kthehen vetë në numra, prandaj është më i sigurt.
Exceptions in C++ (throw, catch)
Përjashtimet në C++Në C++ e hedh një gabim me throw dhe e kap me try/catch. Kështu gabimi mund të trajtohet në një vend tjetër, larg nga ku ndodhi. Libraria standarde ka gabime të gatshme si std::runtime_error.
File I/O (fstream)
Skedarët në C++Me <fstream>, ifstream lexon nga skedarët dhe ofstream shkruan në to — me të njëjtat << dhe >> që i përdor me cout dhe cin. Skedari mbyllet vetë kur objekti del nga scope-i.
for loop (C++)
Cikli for në C++Cikli for klasik në C++ ka tri pjesë në kllapa: ku fillon (int i = 0), deri kur vazhdon (i < 10) dhe si ndryshon pas çdo hapi (i++). Është cikli që përdoret më shumë në detyrat e shkollës.
Function declaration (prototype)
Deklarimi i funksionitNë C++ një funksion duhet të jetë i njohur para se ta përdorësh. Prandaj shpesh shkruan vetëm „kokën“ e tij lart (prototipin) — emrin, parametrat dhe tipin e kthimit — dhe trupin e plotë më poshtë ose në një skedar tjetër.
g++, GCC & Clang
g++ (pjesë e GCC-së), Clang dhe MSVC i Microsoft-it janë kompajlerët më të njohur të C++. E kthejnë kodin tënd në program që ekzekutohet. Në Windows, MinGW të jep g++; shumë IDE e kanë të instaluar brenda.
Header files (.h / .hpp)
Skedarët headerNë C++ kodi zakonisht ndahet në dy skedarë: header-i (.h) që thotë çfarë ekziston — klasat dhe prototipet e funksioneve — dhe .cpp-ja që e ka kodin e plotë. #pragma once në krye të header-it e pengon të përfshihet dy herë.
Inheritance in C++ (: public)
Trashëgimia në C++Në C++ një klasë trashëgon nga një tjetër me „: public Prindi“. Fëmija merr fushat dhe metodat e prindit dhe mund t'u shtojë të tijat. Ndryshe nga Java, C++ lejon edhe trashëgimi nga disa klasa njëkohësisht.
int main()
Funksioni main në C++Çdo program C++ fillon te funksioni int main(). Kompjuteri e ekzekuton kodin brenda tij nga lart poshtë, dhe return 0; në fund i thotë sistemit që programi mbaroi pa probleme.
Iterators (C++)
Iteratorët në C++Iteratorët janë si „gishta“ që tregojnë një element brenda një kontejneri. begin() tregon të parin, end() vendin pas të fundit. Algoritmet e STL-së punojnë me një çift iteratorësh, p.sh. sort(v.begin(), v.end()).
Lambda expressions (C++)
Shprehjet lambda në C++Lambda-t në C++ janë funksione të shkurtra pa emër, të shkruara me [](parametrat) { trupi }. Kllapat katrore [] tregojnë cilat variabla nga jashtë mund t'i përdorë. Përdoren shumë me sort() dhe algoritme të tjera.
namespace & std::
Hapësira e emrave (namespace)Një namespace është një „mbiemër“ për emrat në kod, që dy gjëra me të njëjtin emër të mos ngatërrohen. Gjithçka nga libraria standarde e C++ jeton te std, prandaj shkruan std::cout. Me using namespace std; s'ke pse e shkruan çdo herë — mirë për detyra, por shmange në projekte të mëdha.
new & delete
Me new kërkon memorie gjatë ekzekutimit (në heap), dhe me delete e kthen kur s'të duhet më. Po harrove delete, memoria s'lirohet kurrë (memory leak). Në C++ modern përdor më shpesh vector ose smart pointers, që e bëjnë këtë vetë.
nullptr
nullptr është vlera e një pointer-i që s'tregon askund. Nëse përpiqesh ta lexosh (*p) një pointer që është nullptr, programi rrëzohet — prandaj kontrollo gjithmonë para se ta përdorësh.
Operator overloading
Mbingarkimi i operatorëveOperator overloading të lejon të vendosësh çfarë bëjnë +, ==, << e të tjerë për klasat e tua. P.sh. dy objekte Pike mund t'i mbledhësh me + si të ishin numra.
Preprocessor & macros (#define)
Paraprocesori dhe makrotParaprocesori e lexon kodin para kompajlerit dhe zbaton komandat me # — #include, #define, #ifdef. #define krijon makro që zëvendësohen si tekst. Në C++ modern preferohen const dhe funksionet, sepse makrot s'kontrollohen nga kompajleri.
public, private, protected (C++)
Specifikuesit e qasjes në C++Në një klasë C++, public: tregon çfarë mund ta përdorë kushdo, private: çfarë sheh vetëm vetë klasa, dhe protected: çfarë shohin edhe klasat që e trashëgojnë. Kështu i mbron të dhënat nga ndryshimet e gabuara.
Pure virtual function (= 0)
Funksion thjesht virtualNjë funksion thjesht virtual (virtual ... = 0) s'ka trup — thjesht thotë „çdo klasë fëmijë duhet ta ketë këtë“. Klasa që ka të paktën një të tillë bëhet abstrakte: s'mund të krijosh objekte prej saj, vetëm prej fëmijëve.
RAII
RAII (Resource Acquisition Is Initialization) është ideja kryesore e C++: një burim (memorie, skedar, lidhje) e merr në konstruktor dhe e liron në destruktor. Kështu, kur objekti del nga scope-i, gjithçka pastrohet vetë — edhe nëse ndodh gabim.
Range-based for loop
Cikli for mbi koleksionCikli for i bazuar në koleksion (që nga C++11) kalon nëpër çdo element pa numërues: for (int n : notat). Me auto& mund t'i ndryshosh elementet direkt, dhe me const auto& i lexon pa i kopjuar.
References & pass by reference (&)
Referencat në C++Një referencë (&) është një emër i dytë për të njëjtën variabël. Kur një funksion merr parametër me &, punon me origjinalin, jo me një kopje — kështu mund ta ndryshojë, dhe s'humbet kohë duke kopjuar objekte të mëdha.
Segmentation fault
Gabim segmentimiSegmentation fault është kur programi përpiqet të prekë memorie që s'i takon — p.sh. përmes një pointer-i nullptr, ose duke dalë jashtë kufijve të një vargu. Sistemi e ndal menjëherë programin. Është gabimi më i zakonshëm i fillestarëve në C++.
sizeof
sizeof të tregon sa bajt zë një tip ose variabël në memorie — p.sh. sizeof(int) zakonisht është 4, sizeof(double) 8. Ndihmon të kuptosh sa memorie përdor programi.
Smart pointers (unique_ptr, shared_ptr)
Pointer-ët e zgjuarSmart pointer-ët janë pointer-ë që e lirojnë vetë memorien kur s'duhet më — s'ke pse shkruan delete. unique_ptr ka vetëm një pronar; shared_ptr numëron sa e përdorin dhe e fshin kur largohet i fundit. Në C++ modern përdor këta në vend të new/delete.
Stack vs heap
Stack dhe heapProgrami ka dy zona kryesore memorieje. Stack-u është i shpejtë dhe i vogël: variablat lokale vendosen aty dhe zhduken vetë kur mbaron funksioni. Heap-i është i madh: aty kërkon memorie me new (ose vector) dhe ajo mbetet derisa ta lirosh.
static_cast
static_cast<tipi>(vlera) e kthen qartë një vlerë në një tip tjetër, p.sh. int në double, që pjesëtimi të japë presje. Është mënyra e sigurt dhe e lexueshme e C++ në vend të (double) të vjetër të C-së.
std::map
Map-i në C++std::map ruan çifte çelës–vlerë, të renditura sipas çelësit — si fjalori i Python-it. E kërkon vlerën me map["çelësi"], dhe kur kalon nëpër to, dalin me radhë alfabetike.
std::pair
std::pair mban dy vlera bashkë, që mund të jenë të tipeve të ndryshme, dhe i merr me .first dhe .second. Përdoret shpesh për pikat (x, y) ose për çifte si emër–notë.
std::string
Teksti në C++ (string)std::string është tipi i C++ për tekst. Mund t'i bashkosh me +, t'ua marrësh gjatësinë me .size(), dhe me getline() lexon një rresht të tërë nga përdoruesi (cin >> ndalet te hapësira e parë).
std::vector
Vektori në C++vector-i është „lista“ e C++: një varg që rritet vetë kur shton elemente me push_back(). Di vetë madhësinë e vet (.size()) dhe e liron memorien vetë. Është kontejneri që do ta përdorësh më shpesh.
STL (Standard Template Library)
Libraria standarde e shablloneveSTL-ja është pjesa e librarisë standarde të C++ me kontejnerë të gatshëm (vector, map, set, queue, stack), algoritme (sort, find) dhe iteratorë. Me të s'ke pse i shkruan vetë strukturat bazë të të dhënave.
STL algorithms (sort, find)
Algoritmet e STL-sëLibraria <algorithm> ka funksione të gatshme për punët e zakonshme: sort() rendit, find() kërkon, reverse() kthen mbrapsht, max_element() gjen më të madhin. Janë të testuara dhe shumë të shpejta.
Templates
Shabllonet (templates)Templates të lejojnë të shkruash një funksion ose klasë një herë, që punon me çdo tip — int, double, string. vector<int> dhe vector<string> janë i njëjti template me tipe të ndryshme. Janë si generics-at e Java-s.
Undefined behavior
Sjellje e papërcaktuarSjellja e papërcaktuar ndodh kur bën diçka që rregullat e C++ s'e lejojnë — p.sh. lexon jashtë një vargu ose përdor një variabël pa i dhënë vlerë. Programi mund të duket sikur punon, të japë rezultate të çuditshme ose të rrëzohet — dhe sot ndryshe nga nesër.
unordered_map & unordered_set
unordered_map dhe unordered_set përdorin tabela hash, prandaj kërkimi është shumë i shpejtë, por pa renditje. std::set mban vlera unike të renditura. Në garat e programimit, unordered_map shpesh e bën zgjidhjen mjaft të shpejtë.
Unreal Engine
Unreal Engine-i është një nga motorët më të fuqishëm për të bërë lojëra video dhe grafika 3D, dhe kodi i tij shkruhet në C++. Shumë lojëra të mëdha (dhe efekte filmash) janë bërë me të.
virtual functions & override
Funksionet virtualeNë C++, që klasa fëmijë ta mbishkruajë një metodë dhe të thirret versioni i saj edhe përmes një pointer-i të prindit, metoda duhet të shënohet virtual te prindi. Fjala override te fëmija e kontrollon që e ke bërë saktë.