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

Przeciążenie operatora +

VPS Starter Arubacloud
0 głosów
123 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ź 310 wizyt
pytanie zadane 27 października 2018 w C i C++ przez jankowa1ski Gaduła (3,560 p.)
0 głosów
1 odpowiedź 251 wizyt
0 głosów
1 odpowiedź 844 wizyt
pytanie zadane 3 listopada 2018 w C i C++ przez Sic Dyskutant (8,510 p.)

92,959 zapytań

141,921 odpowiedzi

321,152 komentarzy

62,293 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...