Tworzenie/przeciążanie nietypowych operatorów?

Tworzenie/przeciążanie nietypowych operatorów?
  • Rejestracja: dni
  • Ostatnio: dni
0

Czy w C++ można stworzyć własny operator, mam dokładniej na myśli taki o to operator <-? Załóżmy, że w kodzie chcę móc używać takiego zapisu:

Kopiuj
x <- 4;

który przykładowo spowoduje, że zmiennej obiektu x zostanie nadana wartość 4.

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
1

nie można tworzyć własnych operatorów, ale to co pokazałeś to znak mniejszości i unarny minus:

Kopiuj
x < -4

można by coś próbować wykombinować z tych dwóch.

  • Rejestracja: dni
  • Ostatnio: dni
0

Tzn. przeciążyć jeden operator, następnie drugi, gdzie jeden z nich będzie przyjmował jako argument pozostały operator? Jeśli tak, to jak zrobić by operator był argumentem, kombinuje jak to wykonać, ale mi nie wychodzi.

  • Rejestracja: dni
  • Ostatnio: dni
0

To co zwraca operator "-" musi przyjmowac operator "<".

robcio
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Opole
  • Postów: 533
0

załóżmy ,że udało by się tobie przeciążyć ten operator(co jest niemożliwe) to by przy takiej linijce: x <- 4;
wystąpiła dwuznaczność. Sam język programowania do tego nie dopuści

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
1

Nie piszę na co dzień w C++, lecz wykombinowałem takie coś:

Kopiuj
#include <iostream>
using namespace std;
 
class Value
{
  public:
    int value;
    
    Value()
    {
     value = 0;
    }

    Value(int x)
    {
     value = x;
    }
};
 
Value operator - (Value x)
{
 return x;
}
 
void operator < (int& var, Value val)
{
 var = val.value;
}
 
int main()
{
 int x, y;
 
 x = 10;
 y = 20;
 cout << x << "," << y << endl;
 
 x <- Value(1024);
 y <- Value(512);
 cout << x << "," << y << endl;

 x <- Value(y);
 cout << x << "," << y << endl;
}

:>

Innego rozwiązania (tj.bez używania klasy/struktury bądź korzystania z compiler-magic) raczej nie ma.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.