overloaden van de >> operator met m'n eigen class

  • Onderwerp starter Onderwerp starter r4uz
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

r4uz

Gebruiker
Lid geworden
19 aug 2008
Berichten
5
Hoi! Mijn eerste bericht op dit forum :thumb:

Ik ben bezig een eigen class te programmeren, genaamd rational. rational is een class voor het werken met rationale getallen, d.w.z. getallen die te schrijven zijn als een breuk p/q met p en q gehele getallen.

rational heeft twee private int's genaamd teller en noemer (logisch), verder heeft rational ook nog een private member functie void vereenvoudig(), die een breuk zo veel mogelijk vereenvoudigd.

ik heb de volgende operatoren al met succes overloaded: +, -, *, /, ==, <, <=, >, >= en <<. ik zit alleen nog met de haren in het hoofd met de insertion operator >>. :confused:

ik wil dat rational met cin werkt, dus bijvoorbeeld:

Code:
rational x;

cout << "Type een breuk: " << endl;
cin >> x;

ik heb de overloaded functies friends gemaakt van de class zodat ik niet met rational.get() hoef te werken, maar gewoon de private teller en noemer kan pakken. dit is tot nu toe mijn functie voor >> maar hij werkt nog niet goed:

Code:
  istream& operator>>(istream& InputStream, rational& getal){
    int inputTeller, inputNoemer;
    inputTeller = InputStream.get();
    InputStream.ignore(256,'/');
    inputNoemer = InputStream.get();
    getal.teller = inputTeller;
    getal.noemer = inputNoemer;
    return InputStream;
  }

ik test dit in mijn main met de volgende code:

Code:
int main(){
    
  rational x;
  
  cout << "Wat wordt x? Type hieronder: " << endl;
  cin >> x;
  cout << "x = " << x << endl;
  
  system("PAUSE");
  return EXIT_SUCCESS;
}

maar als ik 1/2 invoer, krijg ik 49/50 op het scherm te zien :shocked::confused:

iemand nog een idee hoe het dan anders kan?

alvast bedankt!
 
waarom private variabelen maken als je niet met .get wilt werken?
ohja friends zijn fun in c++ kan je ze zo beschrijven: "friends may touch a friend's private parts"
dus als je zo'n app wilt maken .... ;)
 
maar als ik 1/2 invoer, krijg ik 49/50 op het scherm te zien :shocked::confused:

49 is de ascii-waarde van 1 en 50 van 2
istream::get() leest een char in.
Ik denk dat je een int beter kan inlezen met istream::operator>>(int&).
Code:
istream&
operator>>(istream& InputStream, rational& getal)
{
    int inputTeller, inputNoemer;
    InputStream >> inputTeller ;
    InputStream.ignore(256,'/');
    InputStream >> inputNoemer;
    getal.teller = inputTeller;
    getal.noemer = inputNoemer;
    return InputStream;
}
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan