Par otazok k C++ – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Par otazok k C++ – C / C++ – Fórum – Programujte.comPar otazok k C++ – C / C++ – Fórum – Programujte.com

 

Rocco Siffredi
~ Anonymní uživatel
1 příspěvek
17. 9. 2019   #1
-
0
-

Ahojte vratil som sa po par rokoch (20 rokoch) k C++ A trosku v nom tapem. Takze som si spisal zoznam otazok ak poznate odpoved aspon na jednu poprosim napiste mi ju vopred vdaka.

Za diakritiku sa ospravedlnujem mam zapnutu anglicku klavesnicu

Takze:

1. ako sa definuje operator implicitnej typovej konverzie? v C# to mame tak predpokladam ze C++ to ma tiez
- nieco som si sice vygooglil ale nefugje mi to takze asi som daco nepochopil
2. ako je to s metodami ktore su definovane v tele triedy? ja som sa C++ ucil este v 90s a mari sa mi ze funkcie definovane v tele triedy sa prekladali ako inline plati to este? alebo si to prekladac prelozi ako chce?
3. preco mi nefunguje toto:
char* aaa = "Test";
ale toto uz hej:
const char* aaa = "Test";
mam tu otvorenu knihu o C++ a tam vidim v priklade aj ten prvy zapis ako je to mozne? da sa to niekde zapnut?
4. kedy treba uvolnit pamat?
- viem ze u premennych vytvorenych na stacku netreba, u tych sa uvolni pamat automaticky vramci scope, tak kde vsade treba uvolnit tu pamat aj u globalnych premennych ked skonci beh programu? alebo tuto pamat uvolni operacny system? niekde som videl nejaky reference counter ale moc tomu teda netrozumiem ako moze ten counter vediet cz ma decrementovat pocitadlo?
5. da  niekde zapnut viacnasobna inicializacia premennych s rovnakym nazvom? 
int a = 5;
int a = 10; //premenna a prekryje premennu a
6. aky je rozdiel medzi struct a class? V inych jazykoch je struct hodnotovy typ vytvarany na stacku a class referencny typ vytvarany na halde. Lenze v C++ sa daju vytvorit aj tam aj tam a ci budu hodnotove alebo referencne je len na mne nie? 
7. typedef definuje alias na typ - je to vlastne len zastupny nazov za typ da sa niekde nadefinovat aj novy typ ktory sice bude mat rovnaku reprezentaciu ale prekladac mi nedovoli priradit jeden typ do druheho. tak ako napriklad v jazyku ADA

Nahlásit jako SPAM
IP: 95.102.214.–
18. 9. 2019   #2
-
0
-

1. mám za to, že implicitní konverzi provede překladač sám, bez použití jakéhokoliv operátoru, např.

int a, b;
float f;

f = a + b;

součet je int, překladač se postará o přetypování na float sám.

2. Nikdy jsem to nezkoumal, snad se této otázky ujme někdo jiný.

3. řetězec je konstantní. V podstatě tě tím upozorní na potenciální chybu - chce tě odradit od změny jeho obsahu, která by stejně neprošla.

4. řídím se pravidlem ke každému new musí být delete, ke každému malloc musí být free. Je vhodné uvolnit paměť co nejdříve od okamžiku, kdy ji nepotřebuješ. Jinak neefektivně hospodaříš s pamětí a může dojít k jejímu vyčerpání. Windows po aplikaci paměť uvolňuje, ale co v případě, že jsem na systému bez OS? Tam to za mne nikdo neudělá.

5. myslím, že ne, vedlo by to ke guláši. Je možné používat prostory jmen, tam to ale vede k existenci samostatných proměnných. 

6. moje soukromé pravidlo: struct obsahuje jen data, class obsahuje i práci s daty (= metody). Vzniklo hlavně kvůli přehlednosti. Popravdě lze vytvořit class bez metod obsahující jen data. Nemám ověřené - můžeš si vyzkoušet zda to projde - i vytvořit struct s funkcí, tedy i práci s daty.

7. opět přenechám odpověď někomu jinému.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
KIIV
~ Moderátor
+43
God of flame
18. 9. 2019   #3
-
0
-

1) Implicitni konverze se delaji automaticky (pokud je to mozne). Plati hlavne pro konstruktory. Nekdy se ale moc nehodi, nebo zpusobuji ruzne vicenasobne konverze, tak se da povolit jen explicitni konverze pomoci modifikatoru explicit u konstruktoru.

U ciselnych typu to v novejsich revizich prekladacu nenecha implicitne prekonvertovat sirsi datovy typ na uzsi. Hlasi bud warningy nebo primo errory o ztrate presnosti a tak. Hlavne proto, ze to byl casty zdroj chyb v programech. Takze programator musi explicitne potvrdit, ze to opravdu chce udelat.

2) inline se musi specifikovat a i tak to nemusi prekladac brat v potaz, pokud se to nevyplati. Urcite to nepujde zapnout u virtualnich metod (alias pri pouziti polymorfizmu, jelikoz se stejne zjistuje co zavolat az za behu).

3) uz ti vesmes odpovedel hu

4) Toto neplati jen pro pamet. Jakykoliv zdroj, ktery zaberes, musis taky uvolnit. Hodne se ted dba na "popularizaci" konceptu RAII (Resource Aquisition Is Initialization) - specialni objekt, ktery pri vytvareni zabere zdroj a jakmile skonci jeho platnost, tak ten zdroj uvolni (scope guard). Pouziva se to na pamet (unique_ptr, shared_ptr, weak_ptr). Mutexy taktez - vytvorenim instance se mutex zamkne a jak skonci platnost promenne, tak se zase odemkne. To vse funguje ikdyz treba neco vyhodi vyjimku.

Proste pokud nejsi zrovna na jednocipech, tak kontejnery, nikde zadne "raw pointery". A mozna ti nebude ani nic unikat.

5) Prekryti promenne jde, ale ne ve stejne urovni. Je to ale dost blba praktika, jelikoz se to da snadno prehlednout a vznikaji obtizne dohledatelne chyby. Nejlepsi je vzdy omezit platnost promenne jen na dobu nezbytne nutnou a urcite nekutat s prekryvanim v podblocich a v odvozenejch tridach a tak.

6) struct a class je to same, jen maji jinou defaultni viditelnost polozek. Tj. struct ma defautne vsechno public ikdyz ho tam nedas a class ma vsechno private.

7) Mozna neco jako enum class (striktnejsi verze enum), pro cisla a nektere specificke POD (plain old data) typy. Pripadne jedine zabalit do trid a nedovolit implicitni konverze.

Nahlásit jako SPAM
IP: 78.80.18.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Sara Manuel
~ Anonymní uživatel
1 příspěvek
1. 11. 2019   #4
-
0
-

Frontier Business customer service phone number (800) 608-2315. This is the number that Frontier business customers should call for all customer service problems. General questions, technical support and information about billing, payment or anything else.       

Nahlásit jako SPAM
IP: 223.190.19.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 7 hostů

Podobná vlákna

Pár otázok k VB — založil Majox

Php - pár otázok... — založil Anonymní uživatel

Pár otázok k VB6 — založil Majox

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý