Hlavní navigace

Názor ke článku Jaký jazyk jako první? od Nemo7 - Dal jsem sem pár odstavců z výuky OOP...

  • 19. 2. 2014 18:53

    Nemo7 (neregistrovaný) 46.227.171.---

    Dal jsem sem pár odstavců z výuky OOP v C++ z Builderu. Stále si myslíte, že se programátor v C++ obejde bez aspoň trochu hlubších znalostí o paměti atp.? Začátečník určitě všechno hned perfektně pochopí a bude s radostí psát programy v C++. Stejně jako já, když jsem začínal s Pascalem. :-) Nebo se dnes už v C++ programuje jinak? Jsem už trochu staršího data(a výukové lekce z Builderu také). Myslel jsem, že se v C++ stále programuje stylem, který cituji. Vždy jsem měl C++ za "nižší" úroveň programovacího jazyka ve smyslu blíž k "železu" a s daleko pečlivějším staráním se o zdroje.

    1. Lekce - OOP programování v C++
    Reference - V C++ existuje vedle proměnné nějakého typu a ukazatele na proměnnou nějakého typu také reference na proměnnou nějakého typu. Mám-li to říci hodně neformálně, tak reference je ukazatel, se kterým se pracuje stejně jako se statickou proměnnou. S pojmem ukazatel se jistě každý programátor v jazyce C již musel setkat.

    http://www.builder.cz/rubriky/c/c--/zaklady-oop-v-c-od-c-k-c--155657cz

    4. Lekce - Vytváření instancí - konstruktory, destruktory
    V programu jsou nejprve zavolány konstruktory globálních instancí, poté je až spuštěna funkce main , ve které jsou volány konstruktory a destruktory na lokální instance. Po skončení main jsou likvidovány globální instance.
    ...
    Další možností je dynamické alokace paměti na haldě, a vytvoření instance. K takové instanci přistupujeme přes ukazatel, který na ní "ukazuje". Ukazatel deklarujeme jako v jazyce C. Pro alokaci paměti existuje nový operátor new. V takovém případě instance "přežije" konec bloku, a je potřeba ji zrušit operátorem delete. Stejně jako je tomu v C s dynamickými prom. Obdoba new a delete je v C malloc a free.
    ...
    Destruktor, jak již asi sám jeho název napovídá, slouží k likvidaci objektů. Destruktor (stejně jako konstruktor) je metoda, která je zavolána na instanci v momentě, kdy je instance likvidována. Destruktor se jmenuje stejně jako třída, jen před názvem třídy je znak ~ . Destruktor nesmí mít návratovou hodnotu a žádné parametry. V destruktoru by se měly uvolnit všechny zdroje, se kterými instance pracovala. Například uzavřít datové soubory, uvolnit případnou alokovanou paměť a podobně.

    http://www.builder.cz/rubriky/c/c--/vytvareni-instanci-konstruktory-destruktory-155678cz

    5. lekce - Kopírovací konstruktor v C++
    Přesto spustíte-li program, zjistíte, že program spadne vyvoláním metody instance v2 ( Tento řádek jsem okomentoval "BUM"). Abych byl přesný, program havaruje na 100% jen pod OS Linux, který má přísnou kontrolu a ochranu přístupu do paměti. Tento program pod Windows xx spadne jen někdy, což jsou velmi nepříjemné chyby, které se velmi obtížně ladí. Pod Windows by se dalo spíše očekávat, že se v programu nepochopitelně mění některé proměnné a podobně. V každém případě se ale jedná o chybu programátora, ne OS, nebo C++. V příkladu, který jsem uvedl, je chyba. V momentě, kdy je vykonáván řádek: v2.nastavPrvek(2,0); již není alokováno pole Slozky instance v2. Ukazatel složky v instanci v2 ukazuje na nealokovanou paměť ("nikam").
    ...
    Program nejprve zkopíruje na svůj zásobník všechny parametry funkce. Jedná-li se o metodu, je navíc kopírován i implicitní parametr this. Také se na zásobník uloží návratová adresa, ale to nyní není podstatné. Po skončení funkce, nebo metody se uloží do nějakého registru (podle typu) návratová hodnota a předá se řízení na návratovou adresu volajícímu. Volající přečte návratovou hodnotu, "vyčistí" zásobník a pokračuje v činnosti.

    http://www.builder.cz/rubriky/c/c--/kopirovaci-konstruktor-v-c--155685cz