Перегрузка операторов различными типами данных в C ++ - PullRequest
0 голосов
/ 01 апреля 2019

Возьмем для примера:

float operator+(int a, float b)
{
   Return b + (float)a;
}

void main()
{
    int a = 10;
    float b = 2.5f;
    float c;

    c = a + b; //works as intended
    c = b + a; //results in type mismatch error
}

Итак, мой вопрос: есть ли способ получить параметры, принимаемые в двух направлениях, без определения второй функции?

Ответы [ 2 ]

2 голосов
/ 01 апреля 2019

Невозможно перегрузить операторы для основных типов. Вы должны перегружать операторы только для тех классов, которые вы определили.

Решение для перегрузки бинарного оператора для вашего собственного класса с неоднородными аргументами симметрично, состоит в том, чтобы определить оператор для первого типа и сделать второй тип неявно конвертируемым в первый.

0 голосов
/ 01 апреля 2019

Используйте float 'a' вместо int 'a'. По умолчанию при добавлении целого числа с плавающей точкой автоматически назначается более высокая точность. (Int + float результат становится float)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...