что отличается между оператором + и оператором [] [дубликат]

В качестве альтернативы вы можете использовать функцию, которую вы уже использовали.

float_to_list(0.02,[{decimals, 2}]) выводит «0.02»

Или для пользователей Elixir;)

:erlang.float_to_list(5.231,[{:decimals, 2}]) выходы «5.2»

2
задан Christophe 17 March 2019 в 21:20
поделиться

1 ответ

Есть два способа перегрузить операторы :

  • как «свободную» функцию (т.е. не являющуюся членом) вне класса, для которого вы хотите их перегрузить,
  • как функция-член.

Приведенная выше ссылка поясняет в хорошей таблице, что перегрузка возможна в виде функций-членов для =, (), [] и ->, но запрещена как свободная функция ,

Кроме того, оператор разрешения области действия ::, а также доступ к элементу ., краткий указатель доступа к элементу на элемент .* и троичный условный оператор x ? y : z не могут быть перегружены [ 1112] вообще.


Редактировать: Вот пример , где operator* определен как функция-член и operator+ как не-функция:

class Rational {
    int p; 
    int q; 
public:  
    Rational (int d=0, int n=1) : p{d}, q{n} { } 
    Rational operator*(const Rational& r) const {    // for curent object * r
        return Rational(p*r.p,q*r.q); 
    }
    int numerator() const {return p; }
    int denominator() const { return q; } 
}; 

Rational operator+(const Rational &a, const Rational &b) {   // for object a + object b
    return Rational(a.numerator()*b.denominator()+b.numerator()*a.denominator(),
                                                      a.denominator()*b.denominator());
}
0
ответ дан Christophe 17 March 2019 в 21:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: