C++, Перегрузка Операторов

Тема в разделе "Общие вопросы по С и С++", создана пользователем alc99vol, 1 дек 2011.

  1. alc99vol

    alc99vol Гость

    Привет всем,

    читал Страуструпа, и немного запутался, помогите, пожалуйста:

    для класса, где операторы определяются как встроенные функции-члены:
    class X{
    ...
    X operator& (X); //-бинарный оператор &
    X operator++(int); //унарный постфиксный ++
    ...
    }
    1) чем тогда будет X operator+(double); //что-то мне подсказывает, что бинарный +, или не?
    2) и как определить бинарный оператор с типом int? (если X operator@(int); - это унарный постфиксный оператор?)

    З.Ы.:а может под вечер я зря читаю Страуструпа, устал и задаю дурацкие вопросы - простите если так:)
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    1. Бинарный.
    2. Так же как и с типом double. (Нельзя использовать символ @ в качестве оператора.)
     
  3. alc99vol

    alc99vol Гость

    1. @ - это имелось в виду любой произвольный оператор, не какой-то конкретный.
    2. в том то и вопрос, ведь "так же как и с типом double" - получится унарный постфиксный оператор, т.к. : "Для любого
    постфиксного унарного оператора @ выражение аа@ интерпретируется либо как
    аа.operator@(int), либо как operator@ (aa, int). " - Страуструпп.
    И получается что(@-любой допустимый опрератор):
    class X{
    ...
    X operator@(double); //бинарный оператор @
    X operator@(int); // унарный постфиксный оператор @ ?
    ...
    }
     
  4. alc99vol

    alc99vol Гость

    ага, сегодня я проспался и погуглил получше, вот тут вот есть ответ:
    http://www.rsdn.ru/forum/cpp/1095607.flat.aspx

    lazybiz: все равно спасибо за ответ.
     
  5. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Что-то ты меня запутал...
    Вот смотри:
    Код (C++):
    #include <iostream>

    using namespace std;

    class A {
    public:
    double  v;

    A operator + ( int a ) {
    A   r;
    r.v = v + a;
    return r;
    }

    A operator + ( double a ) {
    A   r;
    r.v = v + a;
    return r;
    }

    };

    void main ()
    {
    A   a, b, c, d;

    c.v = 10;
    d.v = 1;

    a = c + 1;      // бинарная операция
    b = d + .5;     // бинарная операция

    cout << "a.v = " << a.v << endl;
    cout << "b.v = " << b.v << endl;
    }
     
  6. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
Загрузка...
Похожие Темы - C++ Перегрузка Операторов
  1. MGeorge
    Ответов:
    0
    Просмотров:
    1.342
  2. Nadia_IT
    Ответов:
    0
    Просмотров:
    16
  3. kmm96
    Ответов:
    1
    Просмотров:
    21
  4. TriXel_01
    Ответов:
    5
    Просмотров:
    97
  5. acs-nexus
    Ответов:
    0
    Просмотров:
    87

Поделиться этой страницей