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

Jak zadeklarować operator poza klasą?

Object Storage Arubacloud
0 głosów
807 wizyt
pytanie zadane 3 grudnia 2016 w C i C++ przez niezalogowany

Zadanie: Tworzymy operator wielomian operator+(wielomian w1, wielomian w2), który znajduje się poza klasą wielomian. Operator ma tworzyć nowy obiekt w3 klasy wielomian, który będzie wynikiem dodawania wielomianów w1 i w2. Wypisujemy komendą cout nazwy dodawanych wielomianów. Zwracamy otrzymany wielomian w3.

Wiem w jaki sposób zadeklarować operator wewnątrz klasy, ale niestety poza to już inna sprawa. W jaki sposób mogę to napisać?

2 odpowiedzi

0 głosów
odpowiedź 4 grudnia 2016 przez Wiciorny Ekspert (269,590 p.)
http://stackoverflow.com/questions/4014294/operator-overloading-on-class-templates

Co nie co po angielski.

Generalnie poczytaj o szablonach klas. Względnie szablon operatorów
komentarz 4 grudnia 2016 przez niezalogowany

Mam zrobić tak jak jest to opisane w zadaniu. W taki sposób wygląda deklaracja wewnątrz klasy:

wielomian operator+(wielomian& w1)
	{
		wielomian w3;
		w3.a = this-> a + w1.a;
		w3.b = this-> b + w1.b;
		return w3;
	}

 

0 głosów
odpowiedź 4 grudnia 2016 przez plkpiotr Stary wyjadacz (12,420 p.)
edycja 4 grudnia 2016 przez plkpiotr

Przedstawię Ci przykład dla liczb zespolonych, w jaki sposób przeciążyć operator+ poza klasą ; )

#include<iostream>
using namespace std;

class Zespolona {
private:
    double real;
    double imag;
public:
    Zespolona(double re, double im) : real(re), imag(im) {}
    double getReal() const {
        return real;
    }
    double getImag() const {
        return imag;
    }
};

Zespolona operator+(const Zespolona& a, const Zespolona& b) {
    double re = a.getReal() + b.getReal();
    double im = a.getImag() + b.getImag();
    return Zespolona(re, im);
}

int main() {
    Zespolona x = Zespolona(2.5, 1.2);
    Zespolona y = Zespolona(3.5, 3.4);
    Zespolona z = x + y;
    cout << z.getReal() << " " << z.getImag();
    return 0;
}

Czym się różni od tego zdefiniowanego w klasie? Wyłącznie ilością argumentów i ewentualnie sposobem dostawania się do pól składowych (nie możemy użyć this). Gdybym nie oznaczył tych ostatnich jako prywatne to nie potrzebowałbym getter'ów, jednak nierozsądnie byłoby określić je jako publiczne, po to mamy enkapsulację/hermetyzację w C++ : )

Podobne pytania

0 głosów
2 odpowiedzi 295 wizyt
pytanie zadane 27 października 2017 w C i C++ przez Kurczak Użytkownik (940 p.)
0 głosów
3 odpowiedzi 533 wizyt
0 głosów
1 odpowiedź 81 wizyt
pytanie zadane 9 czerwca 2016 w C i C++ przez alchem Obywatel (1,210 p.)

92,547 zapytań

141,388 odpowiedzi

319,506 komentarzy

61,931 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!

...