Gå til innhold

Operator overloading


Anbefalte innlegg

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
Videoannonse
Annonse

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

#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

#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 av Myubi
Lenke til kommentar

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 av søppel
Lenke til kommentar

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...