Pomoc s funkcí v C++

lacod

Re:Pomoc s funkcí v C++
« Odpověď #15 kdy: 31. 05. 2013, 17:45:05 »
V C++11, je mozne pouzit  novu syntax inicializatorov
Kód: [Vybrat]
#include <ios>
#include <iostream>
using namespace std;
class mojaTrieda {
public:
    void a() {
        cout << "b=" << b <<  endl;
    }
private:
    int b{0}; // Nova syntax incializatorov v C++11, volany je prislusny konstruktor triedy 
};


int main(int argc,char** argv)
{
        mojaTrieda t;
        t.a();
        return 0;
}

Na margo kodu -> a():b(0) - inicializatory clenov tried je mozne uvadzat len v konstruktoroch.
Spat k otazke> pre tento pripad a primitivny typ je to ok a premenu b mozme naplnit. V pripade ze by premenna b bola trieda bez def. ctor, museli by sme pouzit syntax inicializacie z prvej variant napr. mojaTrieda():A(10) .


koja

Re:Pomoc s funkcí v C++
« Odpověď #16 kdy: 31. 05. 2013, 21:50:06 »
Jak uz zaznelo, lze "initializers" pouzivat pouze pro konstruktor.
"Inicializatory" jako jedine umoznuji:
- zavolani rodicovskeho(-ych) konstruktoru vcetne predani parametru
- s tim souvisi i situace kdy promenna objektu nebo rodicovska trida nema default konstruktor a vyzaduje parametr/y
- inicializaci reference a const reference promennych objektu

U vlastnich datovych typu muze byt inicializator rychlejsi (muze usetrit volani druheho konstruktoru pro temporary objekt a jeho prirazeni) ale nevim nakolik toto muze prekladac vyzehlit optimalizaci.

V anglictine hezky sepsano napr. zde:
http://www.cprogramming.com/tutorial/initialization-lists-c++.html

Osobne mam inicializery i tak trochu ideove spojene i s RAII idiomem a snazim se nedelat v tele konstruktoru moc prace. Pokud totiz nekde v konstruktoru vyleti vyjimka je "nechytatelna" (resp. automaticky rethrown) a nevola se destruktor toho objektu (toho hypotetickeho). Takze inicializaci si obvykle maji pekne provadet clenske promenne a uklizet po sobe ve svem destruktoru.
Pripadne je obecna idea zde:
http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization#C.2B.2B_example