frg Skrevet 17. mars 2004 Del Skrevet 17. mars 2004 Noen som vet hvordan man kan legge sammen ett objekt og en int med operator overloading? F.eks: Jeg har ett objekt som innholder navn, alder osv. Det jeg vil gjøre er å legge sammen objektet og tallet slik at "int tallet" blir lagt til alderen i objektet. objekt + alder. Noen som har noen gode ideer? Lenke til kommentar
A_N_K Skrevet 17. mars 2004 Del Skrevet 17. mars 2004 Det er jo ganske simpelt, men med et objekt som det du beskriver blir det forholdsvis uklart hva en slik operasjon gjør. Hvis dette objektet representerer en person (navn, alder kan tyde på det) er det ikke nødvendigvis åpenbart hva som menes, om personen får et par kilo eller et par år mer på baken f.eks. Jeg vil heller foreslå at du lager en spesifikk medlemsfunksjon for å legge til alder, eventuelt slår opp på overlasting i en bok om C++. Lenke til kommentar
søppel Skrevet 17. mars 2004 Del Skrevet 17. mars 2004 #include <iostream> using namespace std; class A { public: int i; void operator()(int i_) { i = i_; } }; // class A int main() { A a; a(123); cout << a.i << endl; return(0); } Dette handler ikke om gode idéer .. dette handler om å slå opp i boka si. Lenke til kommentar
søppel Skrevet 17. mars 2004 Del Skrevet 17. mars 2004 operator+: #include <iostream> using namespace std; class A { public: int i; void operator+(int i_) { i = i_; } }; // class A int main() { A a; a + 123; cout << a.i << endl; return(0); } Lenke til kommentar
frg Skrevet 17. mars 2004 Forfatter Del Skrevet 17. mars 2004 (endret) Edit: Endret 18. mars 2004 av frg Lenke til kommentar
søppel Skrevet 17. mars 2004 Del Skrevet 17. mars 2004 (endret) Er akkurat det samme som det første ex. jeg kom med. Om du bytter () med +, -, /, .. o.s.v. blir liksom det samme. Operator overloading er det samme uansett. Endret 17. mars 2004 av søppel Lenke til kommentar
søppel Skrevet 17. mars 2004 Del Skrevet 17. mars 2004 Må også legge til at det er flere registrerte personer og at jeg skal legg til alderen på ett bestemt personobjekt. std::vector & Co. er fine da. Lenke til kommentar
frg Skrevet 17. mars 2004 Forfatter Del Skrevet 17. mars 2004 Problemet mitt er at jeg ikke helt får til å legge til alderen til ett gitt objekt..... Lenke til kommentar
☀ ❄ Skrevet 17. mars 2004 Del Skrevet 17. mars 2004 (endret) #include <string> class Person { std::string navn; int alder; public: Person() : alder(0) {} Person& operator+(int); }; Person& Person::operator+(int a) { alder += a; return *this; } int main() { Person p; Person nyalder; int leggtilalder = 5; nyalder = p + leggtilalder; // nyalder.operator=( p.operator+(leggtilalder) ); } EDIT: Jeg er veldig enig med søppel i at nyalder er et rart og misvisende personnavn Endret 17. mars 2004 av Myubi Lenke til kommentar
søppel Skrevet 17. mars 2004 Del Skrevet 17. mars 2004 (endret) Det er jo det du har gjordt ovenfor .. selv om du har gitt person-objektet et rart navn. #include <iostream> using namespace std; class Person { public: Person& operator+(int i) { alder = i; return(*this); } // operator+() char navn[30]; int alder; }; // class Person int main() { Person soppel; Person frg; soppel + 123; frg + 321; cout << "soppel er " << soppel.alder << " år gammel." << endl; cout << "frg er " << frg.alder << " år gammel." << endl; return(0); } ..som en eller annen påpekte ovenfor .. så er det idiotisk å bruke operaor+ til dette, siden det gir ingen mening i denne sammenhengen i hvertfall. Endret 17. mars 2004 av søppel Lenke til kommentar
frg Skrevet 17. mars 2004 Forfatter Del Skrevet 17. mars 2004 Alt det dere nevner er greit det får jeg til. Problemet er at dataene om en gitt person ligger i en lenket liste. Problemet mitt er f.eks at jeg søker på "per". Det jeg vil da er at jeg skal kunne endre f.eks alderen på "per" ved hjelp av overloading. Ikke heng dere så mye opp i valg av variabelnavn og at det ikke er så lurt å gjøre det på denne måten. Jeg vil bare prøve å se om det går. Lenke til kommentar
søppel Skrevet 17. mars 2004 Del Skrevet 17. mars 2004 Har du noe kode, i tillegg til denne forklaringen - som viser problemet? Lenke til kommentar
frg Skrevet 17. mars 2004 Forfatter Del Skrevet 17. mars 2004 (endret) Problemet er løst!! Gjorde bare slik: Person Person::operator+( int ald) { this->alder += ald; return *this; } Endret 18. mars 2004 av frg Lenke til kommentar
☀ ❄ Skrevet 18. mars 2004 Del Skrevet 18. mars 2004 // ... Person& Person::operator+(int a) { alder += a; return *this; } // ... Lenke til kommentar
A_N_K Skrevet 18. mars 2004 Del Skrevet 18. mars 2004 /me håper å slippe å se operator-overlasting brukt på denne måten i produksjonskode. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå