Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: anonym 26. 04. 2017, 14:25:55

Název: C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: anonym 26. 04. 2017, 14:25:55
Nejsem C++kář a potřebuju si v tom něco napsat OOP.

Naco jsou tam ty hlavičkové souboru *.h a k nim vždycky ještě *.cpp, když to budu psát OOP a už samotná třída definuje svoje rozhraní sama o sobě? Chápu to správně, že hlavičky slouží jen jako interface k binárce? Potom by mi ovšem stačil jen hlavičkový soubor k binárce, nemusím ho dělat ke každé třídě v rámci jedné binárky, ni?

Další věc statická alokace paměti. Veškeré třídy, jejichž instance se nebudou množit za běhu aplikace, můžu alokovat staticky bez operátoru new. Dá se to tak brát? Tzn. řekněme v praxi by mělo být tak cca 90% všech alokací v C++ statických.

Pokud nějakou instanci alokuji dynamicky, ale v rámci té třídy už alokuju staticky, pak předpokládám, že kompilátor není blbý a i ty statické alokace budou na heapu a ne ve stacku. Jako např. budu mít nějaký vector a do toho budu v cyklu přidávat staticky alokované instance, tak potom tyto instance budou ve výsledku alokovány na heapu, je to tak? Doufám že jo.

Díky.

Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: Kit 26. 04. 2017, 14:46:04
Naco jsou tam ty hlavičkové souboru *.h a k nim vždycky ještě *.cpp, když to budu psát OOP a už samotná třída definuje svoje rozhraní sama o sobě? Chápu to správně, že hlavičky slouží jen jako interface k binárce? Potom by mi ovšem stačil jen hlavičkový soubor k binárce, nemusím ho dělat ke každé třídě v rámci jedné binárky, ni?

Ty hlavičkové soubory jsou tam pro programátory, kteří chtějí v C++ psát strukturovaně.

Další věc statická alokace paměti. Veškeré třídy, jejichž instance se nebudou množit za běhu aplikace, můžu alokovat staticky bez operátoru new. Dá se to tak brát? Tzn. řekněme v praxi by mělo být tak cca 90% všech alokací v C++ statických.

Statické třídy jsou vlastně jen náhradou za namespace u strukturovaného programování. V OOP je dobré se jim vyhnout.

Další věc statická alokace paměti. Veškeré třídy, jejichž instance se nebudou množit za běhu aplikace, můžu alokovat staticky bez operátoru new. Dá se to tak brát? Tzn. řekněme v praxi by mělo být tak cca 90% všech alokací v C++ statických.

Pokud nějakou instanci alokuji dynamicky, ale v rámci té třídy už alokuju staticky, pak předpokládám, že kompilátor není blbý a i ty statické alokace budou na heapu a ne ve stacku. Jako např. budu mít nějaký vector a do toho budu v cyklu přidávat staticky alokované instance, tak potom tyto instance budou ve výsledku alokovány na heapu, je to tak? Doufám že jo.

Dynamická alokace je na heapu, statická je vlastně jen náhradou globálních proměnných a proto se dělá už v době kompilace.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: Honza 26. 04. 2017, 14:50:53
1) Staticky alokované věci nejsou ani stacku, ani na heapu, jsou jinde (společně) - ale statické třídy jsou něco jiného
2) ad. hlavičkové soubory - to, co není nutné, nemusí být zároveň "best-practice"...
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: Frajer odvedle 26. 04. 2017, 14:55:17
Ale ja nemluvim o statickych tridach, ale o staticke alokaci, kde misto:

Trida *t = new Trida();

Napises

Trida t();

Pricemz se ptam, co se stane, kdyz udelam:

For(int i = 0; i<10; i++)
 someVector.push_back( Trida() )

Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: Honza 26. 04. 2017, 14:59:44
deklarace:
Kód: [Vybrat]
Trida t(); // "t" je uloženo na stackuhádám, že pak má být:
Kód: [Vybrat]
someVector.push_back( t ); // udělá se kopie, a ta se uloží do toho vektoru
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: anonym 26. 04. 2017, 15:15:08
deklarace:
Kód: [Vybrat]
Trida t(); // "t" je uloženo na stackuhádám, že pak má být:
Kód: [Vybrat]
someVector.push_back( t ); // udělá se kopie, a ta se uloží do toho vektoru

kopie se asi neudela protoze push_back( Trida &trida)
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: Honza 26. 04. 2017, 15:18:24
kopie se asi neudela protoze push_back( Trida &trida)
no ovšem, potom tam tedy je reference na zásobník = špatný nápad
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: v 26. 04. 2017, 15:24:23
deklarace:
Kód: [Vybrat]
Trida t(); // "t" je uloženo na stackuhádám, že pak má být:
Kód: [Vybrat]
someVector.push_back( t ); // udělá se kopie, a ta se uloží do toho vektoru

kopie se asi neudela protoze push_back( Trida &trida)
jsem to zkusil a prošlo to (g++)
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: v 26. 04. 2017, 15:32:06
kopie se asi neudela protoze push_back( Trida &trida)
špatný nápad
jistě, že není, bude dynamicky alokovat string abyste ho mohl předat << ?
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: Honza 26. 04. 2017, 15:38:39
kopie se asi neudela protoze push_back( Trida &trida)
špatný nápad
jistě, že není, bude dynamicky alokovat string abyste ho mohl předat << ?
Rozdíl je v tom, co s tím ten operátor << udělá, když nenechá odkaz na ten string, tak je to v pořádku.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: anonym 26. 04. 2017, 15:39:27
kopie se asi neudela protoze push_back( Trida &trida)
no ovšem, potom tam tedy je reference na zásobník = špatný nápad

cituju cos napsal: "Staticky alokované věci nejsou ani stacku, ani na heapu, jsou jinde (společně) - ale statické třídy jsou něco jiného"

Nechces se radeji zdrzet odpovedi a nechat odpoved nekomu, kdo tomu rozumi?
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: Honza 26. 04. 2017, 15:44:33
kopie se asi neudela protoze push_back( Trida &trida)
no ovšem, potom tam tedy je reference na zásobník = špatný nápad

cituju cos napsal: "Staticky alokované věci nejsou ani stacku, ani na heapu, jsou jinde (společně) - ale statické třídy jsou něco jiného"

Nechces se radeji zdrzet odpovedi a nechat odpoved nekomu, kdo tomu rozumi?
A v čempak se pletu?
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: anonym 26. 04. 2017, 15:47:19
deklarace:
Kód: [Vybrat]
Trida t(); // "t" je uloženo na stackuhádám, že pak má být:
Kód: [Vybrat]
someVector.push_back( t ); // udělá se kopie, a ta se uloží do toho vektoru

kopie se asi neudela protoze push_back( Trida &trida)
jsem to zkusil a prošlo to (g++)

Jasne ze to proslo, co by to asi jineho melo udelat?

OMG...
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: bigben 26. 04. 2017, 15:50:22
Naco jsou tam ty hlavičkové souboru *.h a k nim vždycky ještě *.cpp, když to budu psát OOP a už samotná třída definuje svoje rozhraní sama o sobě? Chápu to správně, že hlavičky slouží jen jako interface k binárce? Potom by mi ovšem stačil jen hlavičkový soubor k binárce, nemusím ho dělat ke každé třídě v rámci jedné binárky, ni?

Ty hlavičkové soubory jsou tam pro programátory, kteří chtějí v C++ psát strukturovaně.

Další věc statická alokace paměti. Veškeré třídy, jejichž instance se nebudou množit za běhu aplikace, můžu alokovat staticky bez operátoru new. Dá se to tak brát? Tzn. řekněme v praxi by mělo být tak cca 90% všech alokací v C++ statických.

Statické třídy jsou vlastně jen náhradou za namespace u strukturovaného programování. V OOP je dobré se jim vyhnout.

Další věc statická alokace paměti. Veškeré třídy, jejichž instance se nebudou množit za běhu aplikace, můžu alokovat staticky bez operátoru new. Dá se to tak brát? Tzn. řekněme v praxi by mělo být tak cca 90% všech alokací v C++ statických.

Pokud nějakou instanci alokuji dynamicky, ale v rámci té třídy už alokuju staticky, pak předpokládám, že kompilátor není blbý a i ty statické alokace budou na heapu a ne ve stacku. Jako např. budu mít nějaký vector a do toho budu v cyklu přidávat staticky alokované instance, tak potom tyto instance budou ve výsledku alokovány na heapu, je to tak? Doufám že jo.

Dynamická alokace je na heapu, statická je vlastně jen náhradou globálních proměnných a proto se dělá už v době kompilace.

Staticke triedy a staticky alokovane objekty su 2 rozdielne veci. Ale verim ze v phpcku a podobných orezaných jazykoch ako java si sa s tym asi nestretol :D
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: whitebull 26. 04. 2017, 15:52:40
OOP se vzdyt dela v Jave. C++ je jen nepovedeny hack. Vzdyt i samotny kernel je psan radeji v cistem C.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: Mirek 26. 04. 2017, 16:01:39
Pěkně komické vlákno. To má potenciál!
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: egyptan_skinuhead 26. 04. 2017, 16:18:55
Samej odborník na C++ tady :D :D :D Ještě by mohli přijít Javaman() :D :D ÁÁÁ já se lámu smíchy :D
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: Sadd 26. 04. 2017, 16:19:21
Nejdriv jsem si myslel že troll je jen autor, teď tak půlka diskutujících...
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: ava 26. 04. 2017, 16:22:03
OOP se vzdyt dela v Jave. C++ je jen nepovedeny hack. Vzdyt i samotny kernel je psan radeji v cistem C.

Presne tak, jestli C++ opravdu nutne nepotrebujes, utec dokud je cas. Timhle

For(int i = 0; i<10; i++)
 someVector.push_back( Trida() )

uz si potencialne zadelavas na segmentation fault, kdyz se treba budes pokouset pristupovat k polozkam toho vektoru mimo kontext kde vznikly. Techto oseru je C++ plne. Jestli potrebujes neco podobneho C++, ale done right, zkus radsi Rust, obzvlast kdyz mas svobodu teprve si vybirat.

Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: zboj 26. 04. 2017, 16:24:57
Nejsem C++kář a potřebuju si v tom něco napsat OOP.

Naco jsou tam ty hlavičkové souboru *.h a k nim vždycky ještě *.cpp, když to budu psát OOP a už samotná třída definuje svoje rozhraní sama o sobě? Chápu to správně, že hlavičky slouží jen jako interface k binárce? Potom by mi ovšem stačil jen hlavičkový soubor k binárce, nemusím ho dělat ke každé třídě v rámci jedné binárky, ni?

Další věc statická alokace paměti. Veškeré třídy, jejichž instance se nebudou množit za běhu aplikace, můžu alokovat staticky bez operátoru new. Dá se to tak brát? Tzn. řekněme v praxi by mělo být tak cca 90% všech alokací v C++ statických.

Pokud nějakou instanci alokuji dynamicky, ale v rámci té třídy už alokuju staticky, pak předpokládám, že kompilátor není blbý a i ty statické alokace budou na heapu a ne ve stacku. Jako např. budu mít nějaký vector a do toho budu v cyklu přidávat staticky alokované instance, tak potom tyto instance budou ve výsledku alokovány na heapu, je to tak? Doufám že jo.

Díky.

New je lepší vůbec nepoužívat. Překladač není blbý, objekt se buď zkopíruje nebo se udělá move. Vnitřně to typicky skončí někde na haldě, ale to si řeší STL interně, konkrétně kolekce podporují && a objekty se tak paměťově spravují korektně.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: anonym 26. 04. 2017, 16:29:48
Nejsem C++kář a potřebuju si v tom něco napsat OOP.

Naco jsou tam ty hlavičkové souboru *.h a k nim vždycky ještě *.cpp, když to budu psát OOP a už samotná třída definuje svoje rozhraní sama o sobě? Chápu to správně, že hlavičky slouží jen jako interface k binárce? Potom by mi ovšem stačil jen hlavičkový soubor k binárce, nemusím ho dělat ke každé třídě v rámci jedné binárky, ni?

Další věc statická alokace paměti. Veškeré třídy, jejichž instance se nebudou množit za běhu aplikace, můžu alokovat staticky bez operátoru new. Dá se to tak brát? Tzn. řekněme v praxi by mělo být tak cca 90% všech alokací v C++ statických.

Pokud nějakou instanci alokuji dynamicky, ale v rámci té třídy už alokuju staticky, pak předpokládám, že kompilátor není blbý a i ty statické alokace budou na heapu a ne ve stacku. Jako např. budu mít nějaký vector a do toho budu v cyklu přidávat staticky alokované instance, tak potom tyto instance budou ve výsledku alokovány na heapu, je to tak? Doufám že jo.

Díky.

New je lepší vůbec nepoužívat. Překladač není blbý, objekt se buď zkopíruje nebo se udělá move. Vnitřně to typicky skončí někde na haldě, ale to si řeší STL interně, konkrétně kolekce podporují && a objekty se tak paměťově spravují korektně.

A co to, co zminuje ava, oser typu seg fault kdyz:

For(int i = 0; i<10; i++)
 someVector.push_back( Trida() )
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: zboj 26. 04. 2017, 16:31:04
OOP se vzdyt dela v Jave. C++ je jen nepovedeny hack. Vzdyt i samotny kernel je psan radeji v cistem C.

Presne tak, jestli C++ opravdu nutne nepotrebujes, utec dokud je cas. Timhle

For(int i = 0; i<10; i++)
 someVector.push_back( Trida() )

uz si potencialne zadelavas na segmentation fault, kdyz se treba budes pokouset pristupovat k polozkam toho vektoru mimo kontext kde vznikly. Techto oseru je C++ plne. Jestli potrebujes neco podobneho C++, ale done right, zkus radsi Rust, obzvlast kdyz mas svobodu teprve si vybirat.
Kecy, v tomto případě si kolekce dělá kopii nebo move (podle verze/třídy), ale chovat se to bude korektně. Akorát lepší než push je emplace.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: zboj 26. 04. 2017, 16:33:51
Nejsem C++kář a potřebuju si v tom něco napsat OOP.

Naco jsou tam ty hlavičkové souboru *.h a k nim vždycky ještě *.cpp, když to budu psát OOP a už samotná třída definuje svoje rozhraní sama o sobě? Chápu to správně, že hlavičky slouží jen jako interface k binárce? Potom by mi ovšem stačil jen hlavičkový soubor k binárce, nemusím ho dělat ke každé třídě v rámci jedné binárky, ni?

Další věc statická alokace paměti. Veškeré třídy, jejichž instance se nebudou množit za běhu aplikace, můžu alokovat staticky bez operátoru new. Dá se to tak brát? Tzn. řekněme v praxi by mělo být tak cca 90% všech alokací v C++ statických.

Pokud nějakou instanci alokuji dynamicky, ale v rámci té třídy už alokuju staticky, pak předpokládám, že kompilátor není blbý a i ty statické alokace budou na heapu a ne ve stacku. Jako např. budu mít nějaký vector a do toho budu v cyklu přidávat staticky alokované instance, tak potom tyto instance budou ve výsledku alokovány na heapu, je to tak? Doufám že jo.

Díky.

New je lepší vůbec nepoužívat. Překladač není blbý, objekt se buď zkopíruje nebo se udělá move. Vnitřně to typicky skončí někde na haldě, ale to si řeší STL interně, konkrétně kolekce podporují && a objekty se tak paměťově spravují korektně.

A co to, co zminuje ava, oser typu seg fault kdyz:

For(int i = 0; i<10; i++)
 someVector.push_back( Trida() )
To funguje korektně, ale doporučuju emplace_back. A obecně, pokud to je pro Linux, použil bych libc++.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: anonym 26. 04. 2017, 16:35:51

uz si potencialne zadelavas na segmentation fault, kdyz se treba budes pokouset pristupovat k polozkam toho vektoru mimo kontext kde vznikly. Techto oseru je C++ plne. Jestli potrebujes neco podobneho C++, ale done right, zkus radsi Rust, obzvlast kdyz mas svobodu teprve si vybirat.
Kecy, v tomto případě si kolekce dělá kopii nebo move (podle verze/třídy), ale chovat se to bude korektně. Akorát lepší než push je emplace.
[/quote]

A kdyby si neco kopii neudelalo, napr. nejaka custom kolekce, tak by k segfault skutecne doslo v pripade pristupovani k tem objektum z jinaciho scopu? (predpokladam ze scope je myslena hierarchie slozenych zavorech {}  )
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: orcus 26. 04. 2017, 16:39:42
OOP se vzdyt dela v Jave. C++ je jen nepovedeny hack. Vzdyt i samotny kernel je psan radeji v cistem C.

Presne tak, jestli C++ opravdu nutne nepotrebujes, utec dokud je cas. Timhle

For(int i = 0; i<10; i++)
 someVector.push_back( Trida() )

uz si potencialne zadelavas na segmentation fault, kdyz se treba budes pokouset pristupovat k polozkam toho vektoru mimo kontext kde vznikly. Techto oseru je C++ plne. Jestli potrebujes neco podobneho C++, ale done right, zkus radsi Rust, obzvlast kdyz mas svobodu teprve si vybirat.

Ale prd, radsi se priste koukni do dokumentace, kdyz necemu nerozumis.

Parametr funkce je sice reference, ale segmentation fault to nehodi. Nejdriv se vytvori objekt tridy Trida na stacku, pak se zavola push_back a preda se mu reference na ten objekt, metoda push_back vytvori kopii toho objektu pomoci copy constructoru (popr. v C++11 je parametr rvalue reference a tam se obsah objektu muze presunout bez kopie pomoci move constructoru) a po volani push_back se muze ten objekt ze stacku odstranit.
Jak se alokuji samotne objekty ve vektoru se urcuje allocatorem, ktery se nastavuje jako parametr sablony tridy vector.
Defaultni je pomoci fce new, takze po smycce for budou ve vektoru objekty alokovane z heapu a je ti jedno jestli tam sahnes mimo "kontext kde vznikly".

Bordel by to delalo jedine, kdyz by to byl vector<Trida&> misto vector<Trida>, ale predpokladam ze bez spravneho duvodu to tazatel delat nebude.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: ava 26. 04. 2017, 16:43:09

For(int i = 0; i<10; i++)
 someVector.push_back( Trida() )

uz si potencialne zadelavas na segmentation fault, kdyz se treba budes pokouset pristupovat k polozkam toho vektoru mimo kontext kde vznikly. Techto oseru je C++ plne. Jestli potrebujes neco podobneho C++, ale done right, zkus radsi Rust, obzvlast kdyz mas svobodu teprve si vybirat.
Kecy, v tomto případě si kolekce dělá kopii nebo move (podle verze/třídy), ale chovat se to bude korektně. Akorát lepší než push je emplace.

Jo, zboj ma pravdu, zmatl me anonym s prispevkem "kopie se asi neudela protoze push_back( Trida &trida)". Omlouvam se za zmateni.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: zboj 26. 04. 2017, 16:48:50

uz si potencialne zadelavas na segmentation fault, kdyz se treba budes pokouset pristupovat k polozkam toho vektoru mimo kontext kde vznikly. Techto oseru je C++ plne. Jestli potrebujes neco podobneho C++, ale done right, zkus radsi Rust, obzvlast kdyz mas svobodu teprve si vybirat.
Kecy, v tomto případě si kolekce dělá kopii nebo move (podle verze/třídy), ale chovat se to bude korektně. Akorát lepší než push je emplace.

A kdyby si neco kopii neudelalo, napr. nejaka custom kolekce, tak by k segfault skutecne doslo v pripade pristupovani k tem objektum z jinaciho scopu? (predpokladam ze scope je myslena hierarchie slozenych zavorech {}  )
[/quote] Ne, kopii dělá překladač. Pokud se předává hodnotou, překladač se o to postará.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: zboj 26. 04. 2017, 16:53:24
Nejsem C++kář a potřebuju si v tom něco napsat OOP.

Naco jsou tam ty hlavičkové souboru *.h a k nim vždycky ještě *.cpp, když to budu psát OOP a už samotná třída definuje svoje rozhraní sama o sobě? Chápu to správně, že hlavičky slouží jen jako interface k binárce? Potom by mi ovšem stačil jen hlavičkový soubor k binárce, nemusím ho dělat ke každé třídě v rámci jedné binárky, ni?

Další věc statická alokace paměti. Veškeré třídy, jejichž instance se nebudou množit za běhu aplikace, můžu alokovat staticky bez operátoru new. Dá se to tak brát? Tzn. řekněme v praxi by mělo být tak cca 90% všech alokací v C++ statických.

Pokud nějakou instanci alokuji dynamicky, ale v rámci té třídy už alokuju staticky, pak předpokládám, že kompilátor není blbý a i ty statické alokace budou na heapu a ne ve stacku. Jako např. budu mít nějaký vector a do toho budu v cyklu přidávat staticky alokované instance, tak potom tyto instance budou ve výsledku alokovány na heapu, je to tak? Doufám že jo.

Díky.
A jen tak mimoběžně, proč to má být C++? Pokud pro to není vážný důvod, ještě bych to zvážil.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: TRLL 26. 04. 2017, 16:54:16
Toto je dôvod prečo C++ považujem za najhorší programovací jazyk aký sa používa. To, že taká primitívna vec ako popísaná tu je tak komplikovaná a záludná je neuveriteľné. Ako toto môže niekto používať a ešte si to chváliť.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: anonym 26. 04. 2017, 16:58:43

uz si potencialne zadelavas na segmentation fault, kdyz se treba budes pokouset pristupovat k polozkam toho vektoru mimo kontext kde vznikly. Techto oseru je C++ plne. Jestli potrebujes neco podobneho C++, ale done right, zkus radsi Rust, obzvlast kdyz mas svobodu teprve si vybirat.
Kecy, v tomto případě si kolekce dělá kopii nebo move (podle verze/třídy), ale chovat se to bude korektně. Akorát lepší než push je emplace.

A kdyby si neco kopii neudelalo, napr. nejaka custom kolekce, tak by k segfault skutecne doslo v pripade pristupovani k tem objektum z jinaciho scopu? (predpokladam ze scope je myslena hierarchie slozenych zavorech {}  )
Ne, kopii dělá překladač. Pokud se předává hodnotou, překladač se o to postará.
[/quote]

Jasně, chápu že když předáváš hodnou, dělá se kopie. Jenže vector je definován takto:

void push_back (const value_type& val);

Tzn. nepředává se hodnotou, ale odkazem. Nicméně v dokumentaci je uvedeno, ze se bude provadet move nebo copy, takze to nebudu dál rozebírat.

Takže segfaul by mohl vzniknout takhle?

Kód: [Vybrat]

int someGlobal;

void someFunction() {
  int someLocal = 10;
  &someGlobal = &someLocal;
}

void segmentantion_fault() {
  someGlobal = 123;
}

void main() {
  someFunction();
  segmentation_fault();
}

Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: zboj 26. 04. 2017, 17:02:18
Toto je dôvod prečo C++ považujem za najhorší programovací jazyk aký sa používa. To, že taká primitívna vec ako popísaná tu je tak komplikovaná a záludná je neuveriteľné. Ako toto môže niekto používať a ešte si to chváliť.
Co je na tom složitého? Funguje to out of the box.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: anonym 26. 04. 2017, 17:06:09
Jasně, už tomu rozumím, prostě mimo scope se staticka alokace vždycky dealokuje. Takže závěrem se dá říct, že když nebudu v kódu, vyjma psaní parametrů metod a funkcí, kde potřebuju předávat odkzem, používat při práci s objekty &objekt, tzn. nebudu pracovat s jejich adresami (nevim ani jaky bych k tomu mel mit duvod), nemůže se mi nijak stát, že narazím na segfault.

Tak to zní jednoduše :)
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: anonym 26. 04. 2017, 17:08:19
Zboj: Jenže zase, co je potom rychlejší, provádět ústavičně memcopy, nebo prostě alokovat dynamicky? Nebude pak i ta Java rychlejší, než psaní v C++ samým statickým alokováním? Protože sám si řekl, že operator new je lepsi vubec nepouzivat.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: zboj 26. 04. 2017, 17:08:51

uz si potencialne zadelavas na segmentation fault, kdyz se treba budes pokouset pristupovat k polozkam toho vektoru mimo kontext kde vznikly. Techto oseru je C++ plne. Jestli potrebujes neco podobneho C++, ale done right, zkus radsi Rust, obzvlast kdyz mas svobodu teprve si vybirat.
Kecy, v tomto případě si kolekce dělá kopii nebo move (podle verze/třídy), ale chovat se to bude korektně. Akorát lepší než push je emplace.

A kdyby si neco kopii neudelalo, napr. nejaka custom kolekce, tak by k segfault skutecne doslo v pripade pristupovani k tem objektum z jinaciho scopu? (predpokladam ze scope je myslena hierarchie slozenych zavorech {}  )
Ne, kopii dělá překladač. Pokud se předává hodnotou, překladač se o to postará.

Jasně, chápu že když předáváš hodnou, dělá se kopie. Jenže vector je definován takto:

void push_back (const value_type& val);

Tzn. nepředává se hodnotou, ale odkazem. Nicméně v dokumentaci je uvedeno, ze se bude provadet move nebo copy, takze to nebudu dál rozebírat.

Takže segfaul by mohl vzniknout takhle?

Kód: [Vybrat]

int someGlobal;

void someFunction() {
  int someLocal = 10;
  &someGlobal = &someLocal;
}

void segmentantion_fault() {
  someGlobal = 123;
}

void main() {
  someFunction();
  segmentation_fault();
}

[/quote] Přiřazením ne, spíš při čtení pointru na něco, co už neexistuje. V C++ obecně platí: nepoužívat pointry. Pak se nemůže nic zlého stát. Překladač je dostatečně inteligentní na to, aby se postaral o veškeré kopie a přesuny (move) a když se dodrží pár víceméně univerzálně platných principů, it just works. Princip práce C++ je jednoduchý a STL je dostatečně robustní na to, aby se člověk nestřelil do nohy, když nedělá kraviny (jako třeba použití new).
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: Sten 26. 04. 2017, 17:11:06
Jasně, chápu že když předáváš hodnou, dělá se kopie. Jenže vector je definován takto:

void push_back (const value_type& val);

Tzn. nepředává se hodnotou, ale odkazem. Nicméně v dokumentaci je uvedeno, ze se bude provadet move nebo copy, takze to nebudu dál rozebírat.

Takže segfaul by mohl vzniknout takhle?

Kód: [Vybrat]

int someGlobal;

void someFunction() {
  int someLocal = 10;
  &someGlobal = &someLocal;
}

void segmentantion_fault() {
  someGlobal = 123;
}

void main() {
  someFunction();
  segmentation_fault();
}


Ne, protože do &proměnná se nedá přiřazovat.

(Po opravě překlepů a doplnění návratové hodnoty main):
Kód: [Vybrat]
test.cc:6:18: error: expression is not assignable
            &someGlobal = &someLocal;
            ~~~~~~~~~~~ ^
1 error generated.

Zboj: Jenže zase, co je potom rychlejší, provádět ústavičně memcopy, nebo prostě alokovat dynamicky? Nebude pak i ta Java rychlejší, než psaní v C++ samým statickým alokováním? Protože sám si řekl, že operator new je lepsi vubec nepouzivat.

operator new interně používá STL (či make_unique) a move konstruktory slouží právě proto, aby se to pořád nekopírovalo.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: zboj 26. 04. 2017, 17:14:26
Zboj: Jenže zase, co je potom rychlejší, provádět ústavičně memcopy, nebo prostě alokovat dynamicky? Nebude pak i ta Java rychlejší, než psaní v C++ samým statickým alokováním? Protože sám si řekl, že operator new je lepsi vubec nepouzivat.
Nejrychlejší je to neřešit. Slovy klasika: "Just use the STL, it's been written by people way smarter than you." Žádné memcopy se nedělá, typicky to je move, což je bez overheadu. Alternativou je použití shared_ptr, ale to už má overhead (počítání referencí).
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: anonym 26. 04. 2017, 17:21:03
Zboj: Jenže zase, co je potom rychlejší, provádět ústavičně memcopy, nebo prostě alokovat dynamicky? Nebude pak i ta Java rychlejší, než psaní v C++ samým statickým alokováním? Protože sám si řekl, že operator new je lepsi vubec nepouzivat.
Nejrychlejší je to neřešit. Slovy klasika: "Just use the STL, it's been written by people way smarter than you." Žádné memcopy se nedělá, typicky to je move, což je bez overheadu. Alternativou je použití shared_ptr, ale to už má overhead (počítání referencí).

A jak funguje ten move, předpoladam že se nekopuje cely blok pameti, ale jen adresa? Protoze jinak by to asi nebylo o moc rychlejsi nez memcopy. Takze ten move v podstate by mel fungovat tak, ze znovu alokuje pamet jiz vyhrazenou pro nejakou tu staticky alokovanou promennou a ta pamet pak jiz spada pod scope promenne, do ktere bylo move provedeno, je to tak?
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: zboj 26. 04. 2017, 17:32:13
Zboj: Jenže zase, co je potom rychlejší, provádět ústavičně memcopy, nebo prostě alokovat dynamicky? Nebude pak i ta Java rychlejší, než psaní v C++ samým statickým alokováním? Protože sám si řekl, že operator new je lepsi vubec nepouzivat.
Nejrychlejší je to neřešit. Slovy klasika: "Just use the STL, it's been written by people way smarter than you." Žádné memcopy se nedělá, typicky to je move, což je bez overheadu. Alternativou je použití shared_ptr, ale to už má overhead (počítání referencí).

A jak funguje ten move, předpoladam že se nekopuje cely blok pameti, ale jen adresa? Protoze jinak by to asi nebylo o moc rychlejsi nez memcopy. Takze ten move v podstate by mel fungovat tak, ze znovu alokuje pamet jiz vyhrazenou pro nejakou tu staticky alokovanou promennou a ta pamet pak jiz spada pod scope promenne, do ktere bylo move provedeno, je to tak?
Alokuje nový objekt a obsah přesune. To už závisí na konkrétním objektu, jak přesně se dělá move.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: ava 26. 04. 2017, 18:07:20
Přiřazením ne, spíš při čtení pointru na něco, co už neexistuje. V C++ obecně platí: nepoužívat pointry. Pak se nemůže nic zlého stát. Překladač je dostatečně inteligentní na to, aby se postaral o veškeré kopie a přesuny (move) a když se dodrží pár víceméně univerzálně platných principů, it just works. Princip práce C++ je jednoduchý a STL je dostatečně robustní na to, aby se člověk nestřelil do nohy, když nedělá kraviny (jako třeba použití new).

Jak se realizuje třídní polymorfismus v C++  bez new?
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: Frajer odvedle 26. 04. 2017, 18:09:41
Přiřazením ne, spíš při čtení pointru na něco, co už neexistuje. V C++ obecně platí: nepoužívat pointry. Pak se nemůže nic zlého stát. Překladač je dostatečně inteligentní na to, aby se postaral o veškeré kopie a přesuny (move) a když se dodrží pár víceméně univerzálně platných principů, it just works. Princip práce C++ je jednoduchý a STL je dostatečně robustní na to, aby se člověk nestřelil do nohy, když nedělá kraviny (jako třeba použití new).

Jak se realizuje třídní polymorfismus v C++  bez new?

SomeA a = SomeB();

To v Rustu nemate?
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: zboj 26. 04. 2017, 18:13:10
Přiřazením ne, spíš při čtení pointru na něco, co už neexistuje. V C++ obecně platí: nepoužívat pointry. Pak se nemůže nic zlého stát. Překladač je dostatečně inteligentní na to, aby se postaral o veškeré kopie a přesuny (move) a když se dodrží pár víceméně univerzálně platných principů, it just works. Princip práce C++ je jednoduchý a STL je dostatečně robustní na to, aby se člověk nestřelil do nohy, když nedělá kraviny (jako třeba použití new).

Jak se realizuje třídní polymorfismus v C++  bez new?
Přes ukazatele. Ono to new je samozřejmě schované v STL, ale explicitně je kravina ho používat, když chce člověk bezpečný kód, takže to chce make_shared apod. Proto má taky C++ auto, aby člověk nezešedivěl při rozepisování typů.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: hu 26. 04. 2017, 18:31:11
Zboj: Jenže zase, co je potom rychlejší, provádět ústavičně memcopy, nebo prostě alokovat dynamicky? Nebude pak i ta Java rychlejší, než psaní v C++ samým statickým alokováním? Protože sám si řekl, že operator new je lepsi vubec nepouzivat.
Nejrychlejší je to neřešit. Slovy klasika: "Just use the STL, it's been written by people way smarter than you." Žádné memcopy se nedělá, typicky to je move, což je bez overheadu. Alternativou je použití shared_ptr, ale to už má overhead (počítání referencí).

A jak funguje ten move, předpoladam že se nekopuje cely blok pameti, ale jen adresa? Protoze jinak by to asi nebylo o moc rychlejsi nez memcopy. Takze ten move v podstate by mel fungovat tak, ze znovu alokuje pamet jiz vyhrazenou pro nejakou tu staticky alokovanou promennou a ta pamet pak jiz spada pod scope promenne, do ktere bylo move provedeno, je to tak?
Alokuje nový objekt a obsah přesune. To už závisí na konkrétním objektu, jak přesně se dělá move.

Tak obecně je move konstrukce efektivnější jen v případě, že se v dané třídě odkazuje na nějaká dynamicky alokovaná data. Obyčejné membery stejně musíš zkopírovat.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: Anonym 26. 04. 2017, 18:51:25
Tyy vole co to zas ma byt to Object slicing, proc sakra nejde jednoduse udelat

A a = ChildOfA()

?

Jak bych fakt nekoho videl vyuzivat v kodu jakymkoliv zpusobem object slicing, tak bych ho normalne poslal do pejci. Jazyk by vubec nemel neco takoveho umoznovat.

Uz chapu, proc se tolik lidi vysralo na statickou alokaci a proste vsude v C++ pouzivaji operator new, to aby nemuseli resit a chapat tyhlety C++ srajdy, to nemuze chtit zadny normalni clovek chapat. Ty vole dyt to je horsi nez javascript. Kaslu na C++ a napisu si to v Céčku, ja na blbosti nemam cas. C++ vypada asi tak, jako uz od pohledu ten blazen Soustrup.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: hu 26. 04. 2017, 18:58:00
Tyy vole co to zas ma byt to Object slicing, proc sakra nejde jednoduse udelat

A a = ChildOfA()

?

Jak bych fakt nekoho videl vyuzivat v kodu jakymkoliv zpusobem object slicing, tak bych ho normalne poslal do pejci. Jazyk by vubec nemel neco takoveho umoznovat.

Uz chapu, proc se tolik lidi vysralo na statickou alokaci a proste vsude v C++ pouzivaji operator new, to aby nemuseli resit a chapat tyhlety C++ srajdy, to nemuze chtit zadny normalni clovek chapat. Ty vole dyt to je horsi nez javascript. Kaslu na C++ a napisu si to v Céčku, ja na blbosti nemam cas. C++ vypada asi tak, jako uz od pohledu ten blazen Soustrup.

No tak jako představa, že přijdu k C++ a za dva dny se ho naučím, je značně pomýlená. Je to powerfulní, ale komplexní jazyk.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: y 26. 04. 2017, 18:58:57
Toto je dôvod prečo C++ považujem za najhorší programovací jazyk aký sa používa. To, že taká primitívna vec ako popísaná tu je tak komplikovaná a záludná je neuveriteľné. Ako toto môže niekto používať a ešte si to chváliť.
Ale ono je to naprosto jednoduchy. Jen o tom musis neco vedet a nemyslet si, ze kdyz znas python a javascript, tak s tim vystacis.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: ferren 26. 04. 2017, 19:02:34
tohle je nejake desne rafinovane aprilove vlakno?

Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: Martin Dráb 26. 04. 2017, 19:09:02
Kód: [Vybrat]
Uz chapu, proc se tolik lidi vysralo na statickou alokaci a proste vsude v C++ pouzivaji operator new

Je to bezpečný způsob použití velmi podobný jiným rozšířeným jazykům. Krom toho, při alokaci objektů na zásobníku některé OOP mechanismy nefungují (stejně tak v konstruktorech). Samozřejmě je třeba si hlídat memory leaky, ať už jakýmkoliv způsobem.

C++ nabízí dost prostředků, které se vám mohou hodit např. v případě, že píšete něco náročného na výkon. Ale nikdo je vás nenutí využívat, když nechcete. Prostě si vyberte podmnožinu věcí, co C++ umí, a používejte ji; časem ji můžete obohatit např. o nějaké to šablonové peklo.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: ferren 26. 04. 2017, 19:18:55
btw na stl vektoru atd je fajn ze ani nedovoli napsat nejakou idiotskou kombinaci ktera by mohla udelat ten vektor nekonzistentni/faultujici. strkat tam reference, objekty co nemai copy constructor atd atd neprojde uz na urovni kompilace a to nejhorsi co se muze stat neni crash ale ze se budou delat idiotske kopie.
tak to je prakticky se vsemi zde uvadenymi examply tech zarucene faultujicich kodu, zadna z nich neni ani prelozitelny....

Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: zboj 26. 04. 2017, 19:19:59
Tyy vole co to zas ma byt to Object slicing, proc sakra nejde jednoduse udelat

A a = ChildOfA()

?

Jak bych fakt nekoho videl vyuzivat v kodu jakymkoliv zpusobem object slicing, tak bych ho normalne poslal do pejci. Jazyk by vubec nemel neco takoveho umoznovat.

Uz chapu, proc se tolik lidi vysralo na statickou alokaci a proste vsude v C++ pouzivaji operator new, to aby nemuseli resit a chapat tyhlety C++ srajdy, to nemuze chtit zadny normalni clovek chapat. Ty vole dyt to je horsi nez javascript. Kaslu na C++ a napisu si to v Céčku, ja na blbosti nemam cas. C++ vypada asi tak, jako uz od pohledu ten blazen Soustrup.
A proč ne make_shared teda? S tím OOP funguje podle předpokladů. Jinak někdy je fakt lepší čisté C, případně něco relativně blízkého - Rust, Go etc.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: Anonym 26. 04. 2017, 19:20:36
Kód: [Vybrat]
Uz chapu, proc se tolik lidi vysralo na statickou alokaci a proste vsude v C++ pouzivaji operator new

Je to bezpečný způsob použití velmi podobný jiným rozšířeným jazykům. Krom toho, při alokaci objektů na zásobníku některé OOP mechanismy nefungují (stejně tak v konstruktorech). Samozřejmě je třeba si hlídat memory leaky, ať už jakýmkoliv způsobem.

C++ nabízí dost prostředků, které se vám mohou hodit např. v případě, že píšete něco náročného na výkon. Ale nikdo je vás nenutí využívat, když nechcete. Prostě si vyberte podmnožinu věcí, co C++ umí, a používejte ji; časem ji můžete obohatit např. o nějaké to šablonové peklo.

Jo? Tak asi zase tak moc bezpecny zpusob to neni, kdyz tady zboj radi operatory new vubec nepouzivat a kdyz uz, tak misto nich shared pointry. Sam v tom nemas jasno, tak radeji mlc a najdi si o tom neco na stackoverflow.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: zboj 26. 04. 2017, 19:24:57
Kód: [Vybrat]
Uz chapu, proc se tolik lidi vysralo na statickou alokaci a proste vsude v C++ pouzivaji operator new

Je to bezpečný způsob použití velmi podobný jiným rozšířeným jazykům. Krom toho, při alokaci objektů na zásobníku některé OOP mechanismy nefungují (stejně tak v konstruktorech). Samozřejmě je třeba si hlídat memory leaky, ať už jakýmkoliv způsobem.

C++ nabízí dost prostředků, které se vám mohou hodit např. v případě, že píšete něco náročného na výkon. Ale nikdo je vás nenutí využívat, když nechcete. Prostě si vyberte podmnožinu věcí, co C++ umí, a používejte ji; časem ji můžete obohatit např. o nějaké to šablonové peklo.

Jo? Tak asi zase tak moc bezpecny zpusob to neni, kdyz tady zboj radi operatory new vubec nepouzivat a kdyz uz, tak misto nich shared pointry. Sam v tom nemas jasno, tak radeji mlc a najdi si o tom neco na stackoverflow.
On to hlavně radí Stroustrup nebo třeba Sutter, lidi, co navrhli C++ tak, aby new bylo někde hluboko ve standardní knihovně. Jinak je new dobré je pro vytvoření objektu, který potřebuji dát odkazem mimo C++, třeba do C nebo C#. Jinak unique_ptr má zanedbatelnou režii.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: Martin Dráb 26. 04. 2017, 19:29:35
Citace
Jo? Tak asi zase tak moc bezpecny zpusob to neni, kdyz tady zboj radi operatory new vubec nepouzivat a kdyz uz, tak misto nich shared pointry. Sam v tom nemas jasno, tak radeji mlc a najdi si o tom neco na stackoverflow.

I se smart pointery se interně alokuje dynamicky a je dobré o tom vědět. Moje poznámka o bezpečnosti se vztahovala k tomu, že při použití dynamické alokace se vše bude chovat podobně jako jsou lidé zvyklí z jiných jazyků. Že se práce s čistými pointery nedoporučuje, je jasné. Ani smart pointery ale neřeší všechno.

Když budete používat new a čisté ukazatele, sice se nevyhnete problémům s memory leaky a obecně s pointery (což není nic objevného), ale zase se vyhnete věcem, nad kterými tady nadáváte.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: Martin Dráb 26. 04. 2017, 19:36:07
Citace
OOP se vzdyt dela v Jave. C++ je jen nepovedeny hack. Vzdyt i samotny kernel je psan radeji v cistem C.

Pokud můžu mluvit za WIndows kernel, tak některé části v C++ jsou (např. Windows Driver Framework) a někteří výrobci své ovladače píší také v tomto jazyku. Pokud si člověk dává pozor, nepředstavuje C++ v jádře problém.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: Kiwi 26. 04. 2017, 19:39:08
C++ na nic nového nepoužívej. Jak dlouho asi ještě potrvá, než se přijde na to, že C++ byla fakt slepá ulička... Ani ryba, ani rak.
Jedeš na výkon a jde o systémové/low level věci? -> C
Jedeš na výkon a jde o matematiku? -> Fortran
Jedeš na výkon a jde o kritické věci? -> Ada
Nejde o výše uvedené a jedeš na výkon? -> na této úrovni to nevězí, zvol si vhodnou low level/matematickou/kritickou knihovnu a svou vrstvu napiš v čem chceš. C++ a Brainfucku bych se ale vyhnul.
 :D
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: zboj 26. 04. 2017, 19:53:44
Citace
OOP se vzdyt dela v Jave. C++ je jen nepovedeny hack. Vzdyt i samotny kernel je psan radeji v cistem C.

Pokud můžu mluvit za WIndows kernel, tak některé části v C++ jsou (např. Windows Driver Framework) a někteří výrobci své ovladače píší také v tomto jazyku. Pokud si člověk dává pozor, nepředstavuje C++ v jádře problém.
macOS dtto.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: steve 26. 04. 2017, 20:38:05
macOS je ObjectiveC ne C++, je to dost rozdil.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: zboj 26. 04. 2017, 20:39:57
macOS je ObjectiveC ne C++, je to dost rozdil.
Jenže řeč je o kernelu, a tam je část v C++.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: Kit 26. 04. 2017, 21:09:01
C++ na nic nového nepoužívej. Jak dlouho asi ještě potrvá, než se přijde na to, že C++ byla fakt slepá ulička... Ani ryba, ani rak.
Jedeš na výkon a jde o systémové/low level věci? -> C
Jedeš na výkon a jde o matematiku? -> Fortran
Jedeš na výkon a jde o kritické věci? -> Ada
Nejde o výše uvedené a jedeš na výkon? -> na této úrovni to nevězí, zvol si vhodnou low level/matematickou/kritickou knihovnu a svou vrstvu napiš v čem chceš. C++ a Brainfucku bych se ale vyhnul.
 :D

Tato sada pravidel vypadá docela rozumně. C++ bych však úplně nezatracoval - dá se využít tam, kde je na vývoj dostatek času a musí se přitom šetřit každá nanosekunda běhu aplikace.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: Kiwi 26. 04. 2017, 22:25:46
C++ na nic nového nepoužívej. Jak dlouho asi ještě potrvá, než se přijde na to, že C++ byla fakt slepá ulička... Ani ryba, ani rak.
Jedeš na výkon a jde o systémové/low level věci? -> C
Jedeš na výkon a jde o matematiku? -> Fortran
Jedeš na výkon a jde o kritické věci? -> Ada
Nejde o výše uvedené a jedeš na výkon? -> na této úrovni to nevězí, zvol si vhodnou low level/matematickou/kritickou knihovnu a svou vrstvu napiš v čem chceš. C++ a Brainfucku bych se ale vyhnul.
 :D

Tato sada pravidel vypadá docela rozumně. C++ bych však úplně nezatracoval - dá se využít tam, kde je na vývoj dostatek času a musí se přitom šetřit každá nanosekunda běhu aplikace.

No tak je to samozřejmě s nadsázkou, C++ mě živilo nějakých 15 let. :) Ale právě proto tvrdím, co tvrdím. Jeden z mých posledních C++ projektů byla modifikace průmyslového firmware (128 KB @ ARM7TDMI) tak, aby se určitý nový výpočet vešel do synchronního rámce a jeho algoritmus a potřebná data do paměti, v níž zbývaly nějaké 4 KB. To ++ opravdu nebylo nic jiného než jen 4 zkřížené klacky pod nohama toho C. I programy v Assembleru se mi upravovaly pohodlněji a příjemněji než v C++.
Momentálně jsem na úplně novém C projektu (zahájen před 2 lety from scratch) a ty klacky tu nikomu nechyběj. Aplikační vrstva se vyvíjí v Elixiru. Po dlouhé době mě práce opět baví. Je to jako kdyby se člověk zbavil koule na noze a cítíme to všichni v týmu. Prostě to objektové pojetí v C++ mi nikdy nesedlo a ani si nevzpomínám, že bych kdy viděl program, u něhož bych mohl říct "sakra, to je vono, takhle by to mělo vypadat". Narozdíl od Obj C nebo Smalltalku. Takže jestli někdo víte o nějakém open source projektu v C++ o němž byste řekli, že tak by to mělo vypadat, tak se rád mrknu.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: YF 26. 04. 2017, 22:43:15
C++ na nic nového nepoužívej. Jak dlouho asi ještě potrvá, než se přijde na to, že C++ byla fakt slepá ulička... Ani ryba, ani rak.
Jedeš na výkon a jde o systémové/low level věci? -> C
Jedeš na výkon a jde o matematiku? -> Fortran
Jedeš na výkon a jde o kritické věci? -> Ada
Nejde o výše uvedené a jedeš na výkon? -> na této úrovni to nevězí, zvol si vhodnou low level/matematickou/kritickou knihovnu a svou vrstvu napiš v čem chceš. C++ a Brainfucku bych se ale vyhnul.
 :D

Tato sada pravidel vypadá docela rozumně. C++ bych však úplně nezatracoval - dá se využít tam, kde je na vývoj dostatek času a musí se přitom šetřit každá nanosekunda běhu aplikace.

No tak je to samozřejmě s nadsázkou, C++ mě živilo nějakých 15 let. :) Ale právě proto tvrdím, co tvrdím. Jeden z mých posledních C++ projektů byla modifikace průmyslového firmware (128 KB @ ARM7TDMI) tak, aby se určitý nový výpočet vešel do synchronního rámce a jeho algoritmus a potřebná data do paměti, v níž zbývaly nějaké 4 KB. To ++ opravdu nebylo nic jiného než jen 4 zkřížené klacky pod nohama toho C. I programy v Assembleru se mi upravovaly pohodlněji a příjemněji než v C++.
Momentálně jsem na úplně novém C projektu (zahájen před 2 lety from scratch) a ty klacky tu nikomu nechyběj. Aplikační vrstva se vyvíjí v Elixiru. Po dlouhé době mě práce opět baví. Je to jako kdyby se člověk zbavil koule na noze a cítíme to všichni v týmu. Prostě to objektové pojetí v C++ mi nikdy nesedlo a ani si nevzpomínám, že bych kdy viděl program, u něhož bych mohl říct "sakra, to je vono, takhle by to mělo vypadat". Narozdíl od Obj C nebo Smalltalku. Takže jestli někdo víte o nějakém open source projektu v C++ o němž byste řekli, že tak by to mělo vypadat, tak se rád mrknu.

jak resite interoperabilitu c / elixir?
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: Ondřej Novák 26. 04. 2017, 23:28:38
K čemu jsou v C++ hlavičky? No  každá kompilační jednotka  (cpp soubor) je kompilována samostatně oddělené od ostatních. Musí tedy být kompletní a samostatná. Překladač pro prohnání zdrojáků preprocesorem se zabývá jen tím jedním souborem a ničím jiným. To třeba umožňuje překládat na jiném stroji (distcc).

Každopádně, hlavičky jsou potřeba, aby se společné definice vložily všude tam, kde jsou třeba. Nechceš je tam snad pořád dokola přepisovat. Když mám například dva soubory cpp, které používají jednu třídu, je třeba tu třídu strčit do nějakého společného souboru, který se vloží do každého cpp, aby tu třídu překladač viděl v každém tom cpp. Tomuto souboru se říká hlavičkový soubor.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: Kiwi 27. 04. 2017, 00:34:15
jak resite interoperabilitu c / elixir?

Přes NIFy.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: ferren 27. 04. 2017, 01:14:10
no nevim, pohybuju se kolem grafiky a tam naopak neexistuje prakticky jiny jazyk nez c++. jeho zastoupeni tipuju na 99%.

nemyslim ze z soucasnych jazyku se da poskladat alternativa, a kdyz za 2 roky vznikne, tak stejne v produkcni kvalite bude tak za 10 let. hlavne ani nevidim zadne tendence a uvahy o tom ze existuje i neco jineho nez c++, teda krome kousku cuda,opencl,hlsl,glsl kde se vyuzije zpetna kompatibilita s c.
osobne v c++ napisu rychleji i jednorazovky na urovni shellovych scriptu, urcite to neni ani pomaly jazyk na prototypovani....
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: zboj 27. 04. 2017, 01:24:58
no nevim, pohybuju se kolem grafiky a tam naopak neexistuje prakticky jiny jazyk nez c++. jeho zastoupeni tipuju na 99%.

nemyslim ze z soucasnych jazyku se da poskladat alternativa, a kdyz za 2 roky vznikne, tak stejne v produkcni kvalite bude tak za 10 let. hlavne ani nevidim zadne tendence a uvahy o tom ze existuje i neco jineho nez c++, teda krome kousku cuda,opencl,hlsl,glsl kde se vyuzije zpetna kompatibilita s c.
osobne v c++ napisu rychleji i jednorazovky na urovni shellovych scriptu, urcite to neni ani pomaly jazyk na prototypovani....
To je o zvyku a zkušenostech, někdo v C++ během chvilky napíše kdeco, jiný (pseudoprogramátor à la Javista) si vytrhá všechny vlasy nad první třídou.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: Anonym 27. 04. 2017, 01:46:06
no nevim, pohybuju se kolem grafiky a tam naopak neexistuje prakticky jiny jazyk nez c++. jeho zastoupeni tipuju na 99%.

nemyslim ze z soucasnych jazyku se da poskladat alternativa, a kdyz za 2 roky vznikne, tak stejne v produkcni kvalite bude tak za 10 let. hlavne ani nevidim zadne tendence a uvahy o tom ze existuje i neco jineho nez c++, teda krome kousku cuda,opencl,hlsl,glsl kde se vyuzije zpetna kompatibilita s c.
osobne v c++ napisu rychleji i jednorazovky na urovni shellovych scriptu, urcite to neni ani pomaly jazyk na prototypovani....
To je o zvyku a zkušenostech, někdo v C++ během chvilky napíše kdeco, jiný (pseudoprogramátor à la Javista) si vytrhá všechny vlasy nad první třídou.

Pry pseudoprgramator ala Java, a kdyz se v C++ musis stvat se zavislostma protoze nemate nic jako je Maven, musíš vyplňovat stohy zbytečných .h hlaviček a stohy dalších věcí, o nichž se vsadím, že v tomto tématu byla řečena pouze malá část, tak to si potom teprve budeš připadat jako ten pravý programátor? A jak se cítíš, když ti přijde výplatní páska a na ní máš míň než tvůj ekvivalent pracující v Javě - nejsi potom tak trošku z toho zamindrákovaný, že tu svou efektivitu práce vidíš i na výplatě? No to se ale nesmiš divit, uklízečce taky nikdo nezaplatí víc, když bude pečlivě čistit záchody zubním kartáčkem.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: zboj 27. 04. 2017, 02:27:27
no nevim, pohybuju se kolem grafiky a tam naopak neexistuje prakticky jiny jazyk nez c++. jeho zastoupeni tipuju na 99%.

nemyslim ze z soucasnych jazyku se da poskladat alternativa, a kdyz za 2 roky vznikne, tak stejne v produkcni kvalite bude tak za 10 let. hlavne ani nevidim zadne tendence a uvahy o tom ze existuje i neco jineho nez c++, teda krome kousku cuda,opencl,hlsl,glsl kde se vyuzije zpetna kompatibilita s c.
osobne v c++ napisu rychleji i jednorazovky na urovni shellovych scriptu, urcite to neni ani pomaly jazyk na prototypovani....
To je o zvyku a zkušenostech, někdo v C++ během chvilky napíše kdeco, jiný (pseudoprogramátor à la Javista) si vytrhá všechny vlasy nad první třídou.

Pry pseudoprgramator ala Java, a kdyz se v C++ musis stvat se zavislostma protoze nemate nic jako je Maven, musíš vyplňovat stohy zbytečných .h hlaviček a stohy dalších věcí, o nichž se vsadím, že v tomto tématu byla řečena pouze malá část, tak to si potom teprve budeš připadat jako ten pravý programátor? A jak se cítíš, když ti přijde výplatní páska a na ní máš míň než tvůj ekvivalent pracující v Javě - nejsi potom tak trošku z toho zamindrákovaný, že tu svou efektivitu práce vidíš i na výplatě? No to se ale nesmiš divit, uklízečce taky nikdo nezaplatí víc, když bude pečlivě čistit záchody zubním kartáčkem.
Necítím se nijak, mám svou firmu (za mořem), kde se dělá v Javě i C++.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: ferren 27. 04. 2017, 08:31:35
c++11 je pomerne kompletni a da se v nem psat velmi rychle. driv vadila ona nekompletnost pro jednoduche veci, casto nahrazovana boostem a jinymi knihovnami, dnes je to nejen vykonny jazyk ale pise se v nem kod uplne stejne rychle jak v vyssich jazycich. bezne pisu multithread skoro kazdou blbinu, protoze tam neni prakticky zadna rezie navic, pokud timto zpusobem jste zvykli i premyslet
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: zboj 27. 04. 2017, 09:00:27
c++11 je pomerne kompletni a da se v nem psat velmi rychle. driv vadila ona nekompletnost pro jednoduche veci, casto nahrazovana boostem a jinymi knihovnami, dnes je to nejen vykonny jazyk ale pise se v nem kod uplne stejne rychle jak v vyssich jazycich. bezne pisu multithread skoro kazdou blbinu, protoze tam neni prakticky zadna rezie navic, pokud timto zpusobem jste zvykli i premyslet
V C++11 ještě pár věcí chybělo, řekl bych, že uspokojivého stavu dosáhlo C++14. A teď je za dveřmi C++17.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: ferren 27. 04. 2017, 09:30:42
11 byla revolucni, 14, 17 beru jako evoluce. jinak se asi shodnem.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: zaskodnik 27. 04. 2017, 11:13:38
no nevim, pohybuju se kolem grafiky a tam naopak neexistuje prakticky jiny jazyk nez c++. jeho zastoupeni tipuju na 99%.

nemyslim ze z soucasnych jazyku se da poskladat alternativa, a kdyz za 2 roky vznikne, tak stejne v produkcni kvalite bude tak za 10 let. hlavne ani nevidim zadne tendence a uvahy o tom ze existuje i neco jineho nez c++, teda krome kousku cuda,opencl,hlsl,glsl kde se vyuzije zpetna kompatibilita s c.
osobne v c++ napisu rychleji i jednorazovky na urovni shellovych scriptu, urcite to neni ani pomaly jazyk na prototypovani....
To je o zvyku a zkušenostech, někdo v C++ během chvilky napíše kdeco, jiný (pseudoprogramátor à la Javista) si vytrhá všechny vlasy nad první třídou.

Pry pseudoprgramator ala Java, a kdyz se v C++ musis stvat se zavislostma protoze nemate nic jako je Maven, musíš vyplňovat stohy zbytečných .h hlaviček a stohy dalších věcí, o nichž se vsadím, že v tomto tématu byla řečena pouze malá část, tak to si potom teprve budeš připadat jako ten pravý programátor? A jak se cítíš, když ti přijde výplatní páska a na ní máš míň než tvůj ekvivalent pracující v Javě - nejsi potom tak trošku z toho zamindrákovaný, že tu svou efektivitu práce vidíš i na výplatě? No to se ale nesmiš divit, uklízečce taky nikdo nezaplatí víc, když bude pečlivě čistit záchody zubním kartáčkem.
Necítím se nijak, mám svou firmu (za mořem), kde se dělá v Javě i C++.

Zboj, pošli mi nějaké love, naco jich budeš mít tolik? Já tě za to budu chránit na root.cz.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: hu 27. 04. 2017, 13:32:07
Pry pseudoprgramator ala Java, a kdyz se v C++ musis stvat se zavislostma protoze nemate nic jako je Maven, musíš vyplňovat stohy zbytečných .h hlaviček a stohy dalších věcí, o nichž se vsadím, že v tomto tématu byla řečena pouze malá část, tak to si potom teprve budeš připadat jako ten pravý programátor? A jak se cítíš, když ti přijde výplatní páska a na ní máš míň než tvůj ekvivalent pracující v Javě - nejsi potom tak trošku z toho zamindrákovaný, že tu svou efektivitu práce vidíš i na výplatě? No to se ale nesmiš divit, uklízečce taky nikdo nezaplatí víc, když bude pečlivě čistit záchody zubním kartáčkem.

Jejda, tak nevím, kdo je tu zamindrákovanej :-)
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: Test 27. 04. 2017, 16:07:19
hlavičkové soubory jsou pro interface, cpp soubory jsou pro implementaci.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: . 27. 04. 2017, 17:00:52
To je zase sranda  ;D
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: Jerry 27. 04. 2017, 17:15:04
.... na C++ se vyser Java je mnohem lepší ;D a .h soubory stejně nepotřebuješ ani v C++ ani v Javě ani nikde jinde...
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: Sten 27. 04. 2017, 22:05:49
.... na C++ se vyser Java je mnohem lepší ;D a .h soubory stejně nepotřebuješ ani v C++ ani v Javě ani nikde jinde...

To by mě zajímalo, jak v C++ programujete bez hlavičkových souborů
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: D3ad 28. 04. 2017, 13:21:15
.... na C++ se vyser Java je mnohem lepší ;D a .h soubory stejně nepotřebuješ ani v C++ ani v Javě ani nikde jinde...

To by mě zajímalo, jak v C++ programujete bez hlavičkových souborů

Napise cely projekt do jednoho souboru  :D
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: YF 28. 04. 2017, 14:44:42
Jinak to byva popsano v knihach vetsinou hned na zacatku.
Název: Re:C++ naco jsou hlavičkové soubory když budu psát OOP?
Přispěvatel: expert 29. 04. 2017, 15:45:20
hlavičkové soubory jsou pro interface, cpp soubory jsou pro implementaci.

Toto neplatí zdaleka vždy. Existují header-only knihovny (např. v Boostu je jich většina), které není třeba linkovat, protože veškerá implementace je v headerech.

Při programování šablon stejně implementace bude nejšíš v headeru, ale na to přijdeš sám, proč.