Gå til innhold
Vi introduserer SannhetsGPT✨(Beta) ×

Operator overloading


Anbefalte innlegg

Skrevet

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?

Videoannonse
Annonse
Skrevet

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++.

Skrevet

#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.

Skrevet

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);
}

Skrevet (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 av søppel
Skrevet

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.

Skrevet (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 av Myubi
Skrevet (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 av søppel
Skrevet

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.

Skrevet (endret)

Problemet er løst!! Gjorde bare slik:

 

Person Person::operator+( int ald)

{

this->alder += ald;

 

 

return *this;

 

}

Endret av frg

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å
×
×
  • Opprett ny...