• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przeciążenie operatora +

Object Storage Arubacloud
0 głosów
113 wizyt
pytanie zadane 14 marca 2020 w C i C++ przez amtrax Dyskutant (9,630 p.)

Witam, 

chce przeciążyć operator dodawania tak aby dodawał poszczególne składowe obiektów.  Gdy podaje 2 wartości wszystko wychodzi prawidłowo. Natomiast gdy próbuje dodać więcej niz  2  (suma = a+b+c) kompilator wyrzuca błąd. Czy w moim przypadku jest możliwość dodawania więcej niż 2 wartości na raz? 

double Value::operator+(Value & a )
{

    double s = this->suma + a.suma;
    return s;
}
#ifndef CLASS_H_INCLUDED
#define CLASS_H_INCLUDED

class Value
{
private:
    double przychody;
    double wydatki;
    double suma;
public:
    Value(double p= 0.0, double w  = 0.0){przychody = p, wydatki = w; suma = p-w;}
    double operator+(Value &);



};

#endif // CLASS_H_INCLUDED
#include "class.h"
using namespace std;

int main()
{
    Value a(11.0, 2);
    Value x(11.0, 2);
    Value b(11.4,8.6);
    double d;
    d = a + b + x;
    cout << d;
    return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 14 marca 2020 przez VirtualMember Pasjonat (15,790 p.)
wybrane 14 marca 2020 przez amtrax
 
Najlepsza

Kompilator wyrzuca błąd i robi to słusznie. Spójrz jeszcze raz na swoje funkcje: double operator+(Value &) oraz a+b+x. a+b ewaluuje się do double i tego double chcesz dodać do x. Ale nie masz przeciążonego operatora double operator+(double &) więc błąd

 

Po takiej modyfikacji będzie możliwe to co napisałem w main

#include <iostream>
#include <string>


class Value
{
private:
    double przychody;
    double wydatki;
    double suma;
public:
    Value(double p= 0.0, double w  = 0.0){przychody = p, wydatki = w; suma = p-w;}
    double operator+(Value & other)
    {
        double s = suma + other.suma;
        return s;
    }
 
    double operator+(double other)
    {
        double s = this->suma + other;
        return s;
    }
 
 
};
 

using namespace std;
 
int main()
{
    Value a(11.0, 2);
    Value x(11.0, 2);
    Value b(11.4,8.6);
    double d;
    d = x + (a + b);
    cout << d;
    return 0;
}

Zauważ, że użyłem nawiasowania dlatego ponieważ operator + będzie szukał operatora dodawania typów Value + double. Jak zrobiłbym na odwrót albo bez nawiasów to będziesz miał poszukiwanie operatora dodawania dla typu double: double + Value. By pisać po prostu a+b+x AFAIK  musisz zdefiniować operator niezależny od klasy w postaci jakiejś zewnętrznej funkcji, który łapie z lewej double a z prawej Value ale być może da się to ładniej zrobić.

Podobne pytania

0 głosów
1 odpowiedź 290 wizyt
pytanie zadane 27 października 2018 w C i C++ przez jankowa1ski Gaduła (3,560 p.)
0 głosów
1 odpowiedź 241 wizyt
0 głosów
1 odpowiedź 630 wizyt
pytanie zadane 3 listopada 2018 w C i C++ przez Sic Dyskutant (8,510 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...