Jazyk C++: Přílohy

TODO: doplnit moduly+make, šablony, CTAD, RAII, SFINAE, ... ?

Tabulka 1: Atributy metod

Následující tabulka shrnuje charakteristiky konstruktorů, destruktorů, konverzních funkcí a dalších metod resp. friend funkcí. ---------------------------------------------------------------------- | | může být| vrací | metoda nebo | generováno | dědí se | virtual | typ? | friend fce? | implicitně ---------------------------------------------------------------------- konstruktor | ne | ne | ne | metoda | ano(implicitní,copy,move) destruktor | ne | ano | ne | metoda | ano konverze | ano | ano | ne | metoda | ne = | ne | ano | ano | metoda | ano () | ano | ano | ano | metoda | ne [] | ano | ano | ano | metoda | ne -> | ano | ano | ano | metoda | ne op= | ano | ano | ano | cokoli | ne new | ano | ne | void * | statická m. | ne delete | ano | ne | void | statická m. | ne jiné operátory | ano | ano | ano | cokoli | ne jiné metody | ano | ano | ano | metoda | ne friend funkce | ne | ne | ano | friend | ne ----------------------------------------------------------------------

Tabulka 2: Dědění přístupových práv v C++

Následující tabulka shrnuje způsoby dědění přístupových práv. -------------------------------------------------------------- | právo přístupu | private | protected | public | | děděno jako | | | | ---------------------+---------------------------------------- | private | - | private | private | | protected | - | protected | protected | | public | - | protected | public | -------------------------------------------------------------- Poznámky: o znak - znamená 'nedostupné' o symbol, který se při dědění stane nedostupným, nelze žádným způsobem dědění nebo using deklarace znovu zpřístupnit

Tabulka 3

Přehled metod: typické požadavky na některé metody ---------------------------------------------------------------------- | musí být definován | musí být virtuální | ---------------------------------------------------------------------- konstruktor | ano | - | copy konstruktor | pro dynamická data | - | move konstruktor | pro dynamická data | - | destruktor | pro dynamická data | pro polymorfní třídy | = | pro dynamická data | ne | ---------------------------------------------------------------------- přidělování paměti: ---------------------------------------------------------------------- new | přidělování paměti pro objekty třídy delete | uvolňování - " - new[] | přidělování paměti pro pole objektů delete[] | uvolňování - " - ---------------------------------------------------------------------- definice konverzí: ---------------------------------------------------------------------- třída ---> typ | operator typ () typ ---> třída | konstruktor třída(const typ&) nebo třída(typ) třídaA ---> třídaB | konstruktor třídaB(const třídaA&) nebo třídaB(třídaA) ---------------------------------------------------------------------- zákaz některých operací pro cizí kód specifikací private: ---------------------------------------------------------------------- konstruktor | zabrání vytváření instancí a dědění copy konstruktor | zabrání předávání parametru hodnotou a vracení hodnoty destruktor | zabrání dědění a vytváření/rušení instancí operator = | nedovolí přiřazení ---------------------------------------------------------------------- Poznámka: platí i pro odvozené třídy

Program make

Příklad použití programu make pro malý projekt

#------------------------------------------------------------------------- # obsah souboru Makefile # je tvořen posloupností pravidel definujících závislosti mezi soubory. # Pravidla maji tvar cilový-soubor: zdrojové soubory # Po pravidle následuje popis akcí, které vytvoří cílový-soubor a to # jen v případě, když cílový-soubor je starší než některý zdrojový. # # 'make' nebo 'make all' přeloží vše (bez parametru vezme první pravidlo) # a vytvoří program # 'make archiv' zabalí vše potřebné do archívu # 'make clean' uklidí -- zruší produkty překladu, záložní kopie souborů, atd # UPOZORNĚNÍ: na začátku každého řádku s popisem akce musí být tabulátor! # (Pozor na některé editory, které vkládají mezery.) # proměnná CXX --- volba překladače gcc ##CXX=g++ ## obvykle nastaveno správně # proměnná CXXFLAGS --- volba parametrů překladu CXXFLAGS = -O2 -std=c++11 all: program # překlad prvního modulu soub1.o: soub1.cc soub.h $(CXX) $(CXXFLAGS) -c soub1.cc # překlad druhého modulu soub2.o: soub2.cc soub.h $(CXX) $(CXXFLAGS) -c soub2.cc # sestavení program: soub1.o soub2.o $(CXX) $(CXXFLAGS) -o program soub1.o soub2.o # testování výsledku (regresní testy a podobně) test: program ./program testovací parametry ./program jiné testovací parametry ./program ještě jiné testovací parametry # úklid clean: rm -f *~ *.bak *.o program # vytvoření archívu archiv: tar cf projekt2.tar *.cc *.h Makefile gzip projekt2.tar #-------------------------------------------------------------------------

Poznámka:Program make dovoluje různé optimalizace zápisu, například implicitní volání překladače podle šablony, když pravidlo nemá definovánu žádnou akci; implicitní pravidla atd. Je možné použít proměnné podobně jako v shellu. Další podrobnosti viz 'man make' a další dokumentace.



Poslední modifikace: 12. January 2024
Připomínky k obsahu stránky posílejte na e-mail: peringer AT fit.vutbr.cz