vy zkušenější, mohli byste mi říct, proč nelze vrátit ukazatel na řetězec metodou používající const, když nezasahuji do vnitřku třídy (bez const kód funguje normálně).
Níže je imaginární kód (nejedná se o žádný konkrétní problém, jen jsem to napsal pro demonstraci) v nefunkční podobě (s const u metody getNazev()). Když const odstraním, kód normálně funguje.
#1ondrej39
možná mě někdo opraví, ale důvod proč ti to nejde vrátit je ten, že fce pro vrácení názvu třídy vrací const ukazatel na blok alokovaný paměti (nutno alokovat název třídy) a ty vracíš statický blok pole - proto to nejde
// při deklaraci použij
char* nazevTridy;
// v konstruktoru uprav
this->nazevTridy = new char[strlen(nazevTridy) + 1];
strcpy(this->nazevTridy, nazevTridy);
// nutno pridat desktruktor
~Trida() { delete[] nazevTridy; }
#2ingiraxo #3KIIV
Pánové, děkuju za odpověď. Především za vyřešení s const. Otázka je, zda bych, teoreticky, mohl ponechat kód bez const? Bylo by to bezpečné, nebo v případě, že určitá funkce do třídy nezasahuje se používání neměnných proměnných přímo doporučuje?
#4ondrej39
jako takhle... můžeš to použít bez const... většinou se tohle ošetřování a "omezování" používá u frameworků/api/sdílených projektů, kde chceš ostatním definovat nějaký pravidla
V praxi u aplikací na kterých děláš jen ty sám, pro vlastní potřeby apod., tak se tohle ošetřování většinou nepoužívá, ale bránit ti v tom nikdo nebude ;)
#5ingiraxo
Spíš by mě zajímalo, jak je to správně - předpokládám, že s const, vzhledem k tvému příspěvku.
Ano, v současnosti naprogramuji úplný hovno :D, ale programování mě docela začalo zajímat a když už něco dělám, rád bych to dělal pořádně. Ne jen tak, aby to fungovalo.
#6ondrej39
Mne sa osvedcilo davat const vsade kde je to mozne. Ked uz mas vecsiu aplikaciu tak to dost sprehladnuje kod lebo si mozes byt isty ze sa dana hodnota nemeni. Pri malych aplikaciach je to jedno.
Nahlásit jako SPAM
IP: 95.105.186.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Mě se spíš osvětčilo ho dávat jen někam a to:
- na všechny gettry
- pro některý parametry funkcí (většinou kde jsou pole/ukazatele/reference)
Úplně všude bych const necpal, někde není potřeba vůbec a někdy to i znepřehledňuje kód, protože např. u funkcí jde nacpat snad na 4 místa (ještě mezi název funkce a návratový typ)
Ale hodně záleží na situaci a co to je za app/projekt. Pokud je to velkej projekt a dělá na tom víc lidí, tak bych se přiklonil k vitamínu - davat všude, ale jinak ne a u mini app to nemá ani moc smysl
#10ingiraxo
Chápu, kam tím míříš. Kód má být přehledný a porozumitelný pro všechny. U velkých projektů const může pomoct tím, že člověku, který to přebere, řekne: "Toto se měnit nebude."