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

Navrh tridy – C / C++ – Fórum – Programujte.comNavrh tridy – C / C++ – Fórum – Programujte.com

 

Scrat0
Návštěvník
27. 9. 2014   #1
-
0
-

Chtel bych se zeptat jak nejlepe udelat toto... mam konstruktor na load objektu a zaroven funkci, ktera umoznuje load a chtel bych vedet jak nejlepe tudelat, aby se objekt, ktery obsahuje data vynuloval/prepsal novym objektem. Idealni by asi bylo ve funkci Load vytvorit novou instanci tridy, pres konstruktor Load a tuto instanci vratit misto te puvodni a puvodni zrusit, nebo tu povodni jen nahradit.

object(); //Default kontruktor
object(LPWSTR soubor); //Load kontruktor
int Load(LPWSTR soubor); //Load funkce

object xxx(lpwFile); //A chci, aby 
xxx.Load(lpwFile2); //tato funkce prepsala vse z puvodniho objektu,//tedy pokud to jde nejak lepe nez prepsanim kazde promenne v tride
//Hlavne pro pripad, ze ne vsechny promenne, kazdy kontruktor nebo //funkce zapisuje a nechci, aby tam zustalo neco z te predesle.
Nahlásit jako SPAM
IP: 88.100.129.–
KIIV
~ Moderátor
+43
God of flame
27. 9. 2014   #2
-
0
-

udelej ten load a pouzij v konstruktoru..

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Scrat0
Návštěvník
28. 9. 2014   #3
-
0
-

#2 KIIV
To me taky napadlo:)

Ale stejne bych chtel vedet, jestli je pomoci funkce tridy mozne vytvorit novou instanci tridy a tou nahradit tu, ktera funkci volala (a puvodni zrusit). 

Nahlásit jako SPAM
IP: 88.100.129.–
Kit+15
Guru
28. 9. 2014   #4
-
0
-

#3 Scrat
Tady ti pomůže kompozice - do objektu dáš druhý objekt. Ten vnitřní můžeš kdykoli vyměnit za jiný.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:dc3d:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Scrat0
Návštěvník
28. 9. 2014   #5
-
0
-

#4 Kit
To neni blbi, super diky.

A jeste jeden dotaz, jsem z VBA zvyklej na privatni funkce, jak neco podobneho udelat v C++, pokud ta funkce neni funkci tridy (tam private /public je).

Nahlásit jako SPAM
IP: 88.100.129.–
vitamin+8
Grafoman
28. 9. 2014   #6
-
0
-

#3 Scrat
Je to mozne:

int object::Load(LPWSTR soubor){
	this->~object();
	new(this) object(subor);
	//...
}

Ale to riesenie od KIIV je lepsie.

Nahlásit jako SPAM
IP: 95.105.229.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
vitamin+8
Grafoman
28. 9. 2014   #7
-
0
-

#5 Scrat
staticka globalna funkcia je nieco ako privatna funkcia pre danu komilacnu jednotku ("modul"), daj si ale pozor, staticka metoda je nieco ine.

Nahlásit jako SPAM
IP: 95.105.229.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Scrat0
Návštěvník
28. 9. 2014   #8
-
0
-

#6 vitamin
Diky, me napadlo jen: 

object xxx;
this = &xxx; // coz se kompilatoru moc nelibilo

A kdyz jsem u toho, nemate nejake jednoduche vysvetleni operatoru -> .Nasel jsem jen structure dereference pres pointer. Ja teda zatim porad spis pouzivam struct.neco nez pres pointer ->neco :(

Nahlásit jako SPAM
IP: 88.100.129.–
Scrat0
Návštěvník
28. 9. 2014   #9
-
0
-

#7 vitamin
Zase dekuju. Podle nazvu "static" bych cekal spis funkci co po opetovnem zavolani ma nastavene promenne tak jak posledni volani skoncilo, tohle bych teda necekal.

Nahlásit jako SPAM
IP: 88.100.129.–
KIIV
~ Moderátor
+43
God of flame
28. 9. 2014   #10
-
0
-

#8 Scrat
kdyz uz, tak    *this = xxx;

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
vitamin+8
Grafoman
28. 9. 2014   #11
-
0
-

#8 Scrat

operator '->' je nieco ako operator '.' len dereferencuje vyraz na lavej strane. Je to v podstate len skrateny zapis tohto:

struct S{
	void fnc();
};

int main(){
	S s;
	S* ptr = &s;

	
	//tieto vyrazy funguju totozne: 
        s.fnc();
	ptr->fnc();
	(*ptr).fnc();


}
Nahlásit jako SPAM
IP: 95.105.229.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Scrat0
Návštěvník
28. 9. 2014   #12
-
0
-

#11 vitamin

Ale  porad nejak nevim proc/kdy/v cem se hodi spis '->' nez '.' 

A i v tomto pripade : this->~object(); jde o to same? Preci jen u this '.' pouzit nejde.

Nahlásit jako SPAM
IP: 88.100.129.–
KIIV
~ Moderátor
+43
God of flame
28. 9. 2014   #13
-
0
-

this jako takovy je jen pointer na sebe.. neni to proste objekt.. proto -> (tj. dereference pointeru a pristup k prvku)

jinak to jde klidne udelat i pomoci:   (*this).~object();

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Scrat0
Návštěvník
28. 9. 2014   #14
-
0
-

Dalsi orisek, da se zapsat pointer na pointer z promenne rovnou jako parametr funkce?

Neco jako : 

long b;
fce(&&b); //coz teda nejde
fce(&(&b)); //taky nejde
Nahlásit jako SPAM
IP: 88.100.129.–
KIIV
~ Moderátor
+43
God of flame
28. 9. 2014   #15
-
0
-

abys mohl delat pointer na pointer, tak potrebujes pointer...

tj. spis neco jako:   long b; long *bp = &b;  fce(&bp); 

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Scrat0
Návštěvník
1. 10. 2014   #16
-
0
-
Ja jen jestli ten krok, kde se vytvari pointer, kterej vlastne na nic nepotrebuju nelze preskocit.
Nahlásit jako SPAM
IP: 88.100.129.–
KIIV
~ Moderátor
+43
God of flame
1. 10. 2014   #17
-
0
-

#16 Scrat
pak nepotrebujes pointer na pointer ne? Hodi se ti jen v pripade, ze chces menit adresu v tom predavanem pointeru (jinak se zmena neprojevi vne funkce).

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Scrat0
Návštěvník
26. 10. 2014   #18
-
0
-

1) Je nejake omezeni pokud zalozim projekt jako Win32 Console Application nebo jako Win32 projekt. Nebo jde v obojim udelat to same a jen se to lisi automaticky generovanym kodem?

2) Pokud mam treba callback Winproc (HWND, UINT, WPARAM, LPARAM). Jak nejlepe do nej dostat nejaka vlastni data (treba pointer)... chtel bych do te funkce dostat i neco navic nez jen samotnou zpravu, ale zapsat treba ten pointer do WPARAM/LPARAM asi neni nejlepsi reseni. Nebo callback napsat v tride a ty data co chci brat z tridy?

3) Pri kompilaci v Microsoft Visual C++ 2010 Express probehnou rychle nejake hlasky - upozorneni, ale nakonec az se to zastavi jsou videt jen ty ze souboru s mainem, jde se nejak vratit na ty ostatni?

Nahlásit jako SPAM
IP: 88.100.129.–
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, 107 hostů

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ý