Item * create(int , double, const string &);

Permalänk
Medlem

Item * create(int , double, const string &);

Tjena, jag undrar med andra ord vad detta betyder, när man skriver Item *:

Item * create(int stock, double price, string name)
Item * read(istream & iss = cin, const ostream msg_stream)

EDIT: Insåg att det inte var hela deklarationen.

Visa signatur

Prylhögen: Nexus 7, iPhone 5, MBPr 2013

Permalänk
Medlem

* är pointer(Pekare), kort och gott en variabel som pekar på en adress i minnet.
Alltså pekare har inget värde utan pekar istället på en "plats" i minnet som har ett värde.

Så när man skriver Item *, så är detta en pekare av typen Item.
Så i ditt fall så retunerar create/read en pekare av typen Item.

Item * create(int stock, double price, string name) Item * read(istream & iss = cin, const ostream msg_stream)

Hoppas du hänger med.

Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770

Permalänk
Medlem
Skrivet av NoPaiN^:

* är pointer(Pekare), kort och gott en variabel som pekar på en adress i minnet.
Alltså pekare har inget värde utan pekar istället på en "plats" i minnet som har ett värde.

Så när man skriver Item *, så är detta en pekare av typen Item.
Så i ditt fall så retunerar create/read en pekare av typen Item.

Item * create(int stock, double price, string name) Item * read(istream & iss = cin, const ostream msg_stream)

Hoppas du hänger med.

Kort och koncist förklarat. Dock är "pekare till något av TYPEN Item" mera korrekt än "Pekare av typen Item". Alla pekare är egentligen identiska då de endast innehåller en minnesadress. Typen används således för att tala om hur stor datan vid adressen i fråga är och hur den skall tolkas etc. Man kan lika gärna skicka runt pekare som void*, men då får man inte typsäkerhet på pekarna och måste själv hålla kolla på vad som är vad.

Visa signatur

Gigabyte Aorus Master | 32gb DDR4 3466MHZ CL14 | Ryzen 3950X | 3080Ti
En lång rad Intel system som barnen fått som speldatorer, VR-dator, massa bärbara, servrar, RPi's och andra boxar :P

Permalänk
Medlem
Skrivet av inquam:

Kort och koncist förklarat. Dock är "pekare till något av TYPEN Item" mera korrekt än "Pekare av typen Item". Alla pekare är egentligen identiska då de endast innehåller en minnesadress. Typen används således för att tala om hur stor datan vid adressen i fråga är och hur den skall tolkas etc. Man kan lika gärna skicka runt pekare som void*, men då får man inte typsäkerhet på pekarna och måste själv hålla kolla på vad som är vad.

Ja du har helt rätt, visste inte riktigt hur jag skulle formulera mig för att TS skulle förstå på ett lätt sätt.
Hoppas han förstår iaf

Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770

Permalänk
Medlem

Nu ska vi se, så Item pekar på funktionen read, resp. create?
Hur går detta ihop?

Jag hade förstått det om Item pekade mot typ en integer variabel, men nu pekar den mot en funktion?

/Fredde

Visa signatur

Prylhögen: Nexus 7, iPhone 5, MBPr 2013

Permalänk
Medlem
Skrivet av QRS5:

Nu ska vi se, så Item pekar på funktionen read, resp. create?

Nej, funktionerna returnerar pekare till Item-instanser.

Permalänk
Medlem
Skrivet av perost:

Nej, funktionerna returnerar pekare till Item-instanser.

Hmm okej, skulle du kunna ge ett lätt exempel på t.ex. denna pekaren?:

Item * read(int x);

Visa signatur

Prylhögen: Nexus 7, iPhone 5, MBPr 2013

Permalänk
Medlem
Skrivet av QRS5:

Hmm okej, skulle du kunna ge ett lätt exempel på t.ex. denna pekaren?:

Item * read(int x);

Typ

Item *pTemp = create(....); pTemp = read(int x); int nyInt = getMigInt(); nyInt = getMigInt();

Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770

Permalänk
Medlem
Skrivet av QRS5:

Hmm okej, skulle du kunna ge ett lätt exempel på t.ex. denna pekaren?:

Item * read(int x);

Det där är ingen pekare, det är en funktions-deklaration. Men säg att Item är en enkel klass vars konstruktor endast tar en int som argument. Då kan du t.ex. skriva en funktion som skapar en ny instans av Item allokerad på heapen:

Item* makeItem(int x) { Item *item = new Item(x); return item; }

Permalänk
Medlem

Item * create(int stock, double price, string name) Item * read(istream & iss = cin, const ostream msg_stream)

Men då är dessa det också, hänger inte riktigt med.

Visa signatur

Prylhögen: Nexus 7, iPhone 5, MBPr 2013

Permalänk
Hedersmedlem
Skrivet av QRS5:

Item * create(int stock, double price, string name) Item * read(istream & iss = cin, const ostream msg_stream)

Men då är dessa det också, hänger inte riktigt med.

Ja (förmodligen skapar de Item-objekt från parametrar respektive fil).

Permalänk
Medlem
Skrivet av Elgot:

Ja (förmodligen skapar de Item-objekt från parametrar respektive fil).

Varför får jag error när jag försöker att köra filen?

Item * read(istream & iss = cin, const ostream msg_stream);

Det står att parameter 2 saknar default värde?

Visa signatur

Prylhögen: Nexus 7, iPhone 5, MBPr 2013

Permalänk
Hedersmedlem
Skrivet av QRS5:

Varför får jag error när jag försöker att köra filen?

Item * read(istream & iss = cin, const ostream msg_stream);

Det står att parameter 2 saknar default värde?

Hur använder du funktionen? Du måste skicka med minst ett argument.

Permalänk
Medlem
Skrivet av Elgot:

Hur använder du funktionen? Du måste skicka med minst ett argument.

Jag vill inte riktigt skriva ut min kod eftersom det är en uppgift i min kurs och det är tänkt att jag ska lösa den helt själv.
Ville bara få reda på vad vissa element betydde.

Ska se om jag kan formulera om frågan så jag inte frågar om själva uppgiften utan om förståelse, återkommer snart (tror jag!).

Visa signatur

Prylhögen: Nexus 7, iPhone 5, MBPr 2013

Permalänk
Medlem
Skrivet av QRS5:

Varför får jag error när jag försöker att köra filen?

Item * read(istream & iss = cin, const ostream msg_stream);

Det står att parameter 2 saknar default värde?

Om en funktionsparameter har ett standardvärde så måste även alla efterföljande parametrar ha det också. Därför får du ett fel, eftersom den första parametern har ett standardvärde men inte den andra parametern.