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:
Připomínky k obsahu stránky posílejte na e-mail:
peringer AT fit.vutbr.cz