Przeciążanie operatora []

0

Witam, poradziłem sobie z przeróżnymi przeciążeniami operatorów jednak jeśli chodzi o poniższy przykład to nie mam pojęcia jak to zrobić, proszę o pomoc:)

Załóżmy że mam taką klasę Punkt:

class Punkt
{
     int x;
     int y;
     Punkt(int a, int b) //konstruktor
     {
          x = a;
          y = b;
      }
};

Pokaże to na przykładzie konkretnych liczb.
Tworzę obiekt takiej klasy np:

Punkt punkt1(2, 4)

Chcę przeciążyć operator [] aby działał w następujący sposób:

podając komendę punkt1[3][5] operator doda współrzędne punktu oraz pierwszy argument podany w operatorze (czyli (2+4)+3))
następnie pomnoży otrzymaną sumę przez drugi argument podany w operatorze (czyli 9*5) i zwróci wynik (czyli 45).

0
#include <iostream>

class InnerPoint
{
private:
    int value;

public:
    InnerPoint(int value) : value(value) { }

    int operator[](int b)
    {
        return value * b;
    }
};

class Point
{
private:
    int x;
    int y;

public:
    Point(int x, int y) : x(x), y(y) { }

    InnerPoint operator[](int a)
    {
        int value = x + y + a;

        return InnerPoint(value);
    }
};

int main()
{
    Point point(2, 4);

    std::cout << point[3][5] << "\n";
}

https://ideone.com/oDnbVR

0

Wot? To się nazywa operator abuse. Nie idź tą drogą.

Ale jak już chcesz się uprzeć, to w C++ nie ma operatora [][]. Co musiałbyś zrobić, to operator [] zwracający jakąś klasę, która z kolei ma drugi [] pozwalający na dokończenie działania i zwrócenie wyniku.

0

No właśnie miałem podobny pomysł, czyli utworzenie dwoch operatorów []:
pierwszy z nich działałby na obiekcie klasy czyli: punkt[x][y] a drugi na tym wyniku.
Jest to możliwe do zrobienia?

4

Jest to możliwe do zrobienia?

Nie, w ogóle.

0

Strasznie mnie to irytuje, że aż tylu ludzi bierze się za jakieś bezsensowne przeciążanie operatorów kiedy jeszcze nawet nie opanowali składni języka, nie mówiąc o wyrobieniu sobie jakiegoś pojęcia o programowaniu w C++.

0

Naprawdę wątpię by chodziło tutaj o jakiś "przykład z życia wzięty", więc nie wiem akurat w tym wątku jest sens o tym za bardzo dywagować. To, o czym piszecie to oczywiście prawda, ale IMO jest to tylko zwykłe ćwiczenie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1