Registrace nového uživatele     Návod     Kluby     Archív  Lopuchu     Lopuch.cz  

Když diskuse,
tak s Lopuchem

Lopuch.cz

Jméno:
Heslo:
Podpora LCD:
 
Klub C, C++ [ŽP: neomezená] (kategorie Programování) moderuje Šéf Lopuchu.
Archiv

Články

Jak bezpečně ukončit vlákno z DllMain
FastAllocPool - urychlení častých alokací a dealokací
Akce a zpráva jako objekt
Tuply v C++
Efektivní alokátor malých objektů a tady druhý a třetí díl
Šablony: Být vládce kvalifikátorů
Vracíme z funkce objekty
Základy komunikace mezi procesy (ve Windows)
Multiple Interface a Instance Factory
Multithreading v C++ (ve Win32)
  Nastavení klubu     Nastavení práv     Homepage     Anketa     Přítomní     Oblíbené     Lopuch     Kategorie  
autor: 
text: 
vyplnit a 
Help
 Titulek, text příspěvku  
Opište pozpátku následující text bez prostředního znaku: mderhkj
[ 380 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  
bredy 25.9.2012 08:28  881
No fuj!
Pokud někam dávám referenci, tak proto, že nechci, aby se dala změnit.

Mimochodem, strčit do objektu referenci na cokoliv krásým způsobem eliminuje defaultní operátor přiřazení.
sekory Sekory The journey of thousand miles - starts with a single step. 4.9.2012 19:49  880
huh: To jsem ani nevěděl.. Někdo mi to říkal, tak jsem to prostě vyzkoušel, a je pravda, že práve jen na MSVC 2010, tak nevím jestli to kousne i jiný kompilátor.
huh huh 4.9.2012 19:42  879
Sekory [878]: Je zajímavý, že VC++ 2010 to stráví, protože standard jasně říká "If a union contains a static data member, or a member of reference type, the program is ill-formed."
sekory Sekory The journey of thousand miles - starts with a single step. 4.9.2012 19:27  878
huh se dotkl toho, jake reseni se zmenou reference jsem mel na mysli. Reference je vlastne neco jako pointer, takze staci vytvorit union s pointrem. V kodu je jeste jedna pomerna zajimava featura a to, ze jmeno typu muze poslouzit i jako jmeno promenne. :)



#include <iostream>
using namespace std;

union test
{
	int* p;
	int& r;
	test(int& x):r(x){}
};

main()
{
	int a = 5;
	test test(a);
	int c = 3;
	test.p = &c;
	c += 3;
	cout << test.r << endl;

	return 0;
}

sekory Sekory The journey of thousand miles - starts with a single step. 2.9.2012 22:14  877
huh: Zajimave, ale treba ve visual studiu to nefunguje. Jde to i jinak aniz bys spolehal, ze se nejake promenne naalokuji za sebou...
huh huh 2.9.2012 21:38  876
Sekory [875]: no reference je v zasade ukazatel, takze pokud ti ji prekladac nezoptimalizuje a dostanes se k nemu, tak to neni takovy problem:
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    int i=1;
    int j=2;
    int& r = i;
    int* a[1];
    cout << r << endl;
    int** pr= a + 1;
    *pr = &j;
    cout << r << endl;
    j = 4;
    cout << r << endl;

    system("PAUSE");
    return EXIT_SUCCESS;
}

sekory Sekory The journey of thousand miles - starts with a single step. 2.9.2012 21:10  875
Schvalne, jestli nekdo z vas vi, jak zmenit referenci. Standardne zmenit po inicializaci nejde, ale existuje takovy "hack" jak zmenit jde. :)
bredy 30.7.2012 09:44  874
Často to používám z toho důvodu, abych skryl implementrační detaily v hlavičkách. Například pokud třída potřebuje nějaké další třídy, které nejsou potřeba pro ovládání té třídy (jsou potřeba jen pro její konstrukci), pak používám interface + implementace + továrnu.

interface definuje funkce, kterým lze objekt ovládat, implementace dědí interface a obsahuje vše, co je potřeba k zajištění činnosti objektu a továrna se stará o to, aby se dal objekt instanciovat bez nutnosti mít naincludované všechny definice pro přeložení třídy.
sekory Sekory The journey of thousand miles - starts with a single step. 18.7.2012 20:58  873
huh: Přesně tak, abstraktní bez implementace. Trochu mi to příjde jako interface v Javě (Javu teda moc neznám...). Každopádně díky.
huh huh 18.7.2012 20:31  872
Sekory [871]: Myslíš čistě virtuální (abstraktní), tj. bez implementace? Tak snad leda, pokud by mělo smysl vytvářet i jiné potomky, byť zatím má jen jednoho. (Druhá možnost je overengineering :-) )
sekory Sekory The journey of thousand miles - starts with a single step. 18.7.2012 18:46  871
K čemu se používá base class, která má všechny metody virtuální, pokud z dění jen jedna další třída, která ty metody implementuje? Nevidím k tomu důvod, ale narazil jsem na to.
sekory Sekory The journey of thousand miles - starts with a single step. 25.6.2012 13:58  870
Tak jsem se rozhodl, že budu používat Eclipse. Už jsem v tom něco malého dělal (v Javě teda) a případně to má člověk i pod Windowsi.
sekory Sekory The journey of thousand miles - starts with a single step. 24.6.2012 21:19  869
C++ IDE pod LinuxemJaké IDE na C++ byste doporučili pod Linux? Existuje toho celkem dost, což rozhodování moc neulehčí. Psát to v nějakém Editoru a pak to kompilovat z příkazové řádky se mi zdá poněkud nevyhovující (ačkoli určitě to má svoje výhody).
bredy 29.3.2012 11:14  867
huhJá jsem taky mimo. Mě jen děsíc výčet featur, které tam mají. Pro ně je to samozřejmě jednoduší, protože spousta šifer má společný základ. Ale i beztak z toho vzniká moloch a nafukuje to kód.

Nicméně se na to podívám. O Crypto++ jsem už taky zavadil.
huh huh 29.3.2012 01:49  866
Bredy [858]: Už je asi pozdě, nicméně jsem narazil na LibTomCrypt, což by to mohlo umět. Jinak teda taky třeba Crypto++. Přiznávám se, že téhle oblasti vůbec nerozumím, takže pokud jsem mimo, tak se omlouvám.

[ 380 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  

(c) 2001-2011 Lopuch.cz   
Kontakt