Objekt jako parametr funkce – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Objekt jako parametr funkce – C / C++ – Fórum – Programujte.comObjekt jako parametr funkce – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
xJakubS0
Newbie
25. 2. 2012   #1
-
0
-

Rád bych předal objekt DATA do funkce, kde upravim jeho hodnoty:

jedna se mi o Data *pDat;

Ale jsem uplně ztracený v referenčních a dereferenčních operátorech.poradíte ? dík

MAIN.CPP:

Data *pDat = new Data;
fgets(line, SIZEBUFF, fIn);
pMan->readline(line, &pDat);
KNIHOVNA.CPP
int readline(char *line, Data dat)
{
sscanf(line, "%lf, %u, %u, %u, %lf, %i", dat.starttimestamp, 
                                         dat.protocol,
                                         dat.srcport,
                                         dat.dstport,
                                         dat.bytes,
                                         dat.tcpflags);
return 0;}

EDIT: a ještě otázečka... pravidlo "kde se používá "." a kde "->"... objasníte mi to někdo pls?

Nahlásit jako SPAM
IP: 46.47.170.–
Je beznadějné udělat blbuvzdorný program, protože blbci jsou geniální.
Reklama
Reklama
yaqwsx+9
Posthunter
25. 2. 2012   #2
-
0
-

Začnu od konce; operátor . používáš, když chceš přistupovat k členům objektu, kterému máš přístup buď "přímo" nebo pomocí reference; tedy:

MojeTrida data;//Vytvoření objektu
MojeTrida &reference = data;//Reference na data
//Poté je platné
data.a;
//i
reference.a;

Operátor -> se požívá k přístupu ke členům objektu, na který máš ukazatel.

//Navazuje na předchozí ukázku
MojeTrida* ukzatel = &data;//ukzatel teď ukazuje na data
//Poté je platné
data->a;
//Což je zkrácený zápis
(*data).a;//Tedy prvně dereferencuji, čímž získám "přímý přístup"
	//Teprve poté si vyžádám člen a

A teď odpověď na první otázku - tak, jak předáváš argument dat, tak ho předáváš kopií. Buď na něj předej ukzatel, anebo ještě lépe refenci. Pro změní na ukzatel musíš přidat * a změnit operátor . na ->

Pokud bys však použil referenci, stačí přidat pouze operátor & do hlavičky funkce a k členům budeš pčistupovat pomocí operátoru .

int readline(char *line, Data& dat)
Nahlásit jako SPAM
IP: 85.160.34.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Furynka0
Newbie
26. 2. 2012   #3
-
0
-

Pokud se nepletu tak je tam ještě jedna malá chybička a to jest

pMan->readline(line, &pDat); //pDat je ukazatel...takže &pDat je adresa ukazatele
                             // a to neni presne co chceme
int readline(char *line, Data& dat) //funkci chceme předat adresu na daný objekt

*pDat //objekt
&pDat //adresa ukazatele
pDat //adresa objektu

pMan->readline(line, pDat); //tohle je správně
Nahlásit jako SPAM
IP: 90.178.176.–
yaqwsx+9
Posthunter
26. 2. 2012   #4
-
0
-

#3 Furynka
Díky za doplnění, tohle jsem přehlédl.

Nahlásit jako SPAM
IP: 85.160.34.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
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, 135 hostů

Moderátoři diskuze

 

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