2011-03-09 5 views
0

Итак, я занимаюсь базовым классом программирования II. Мы должны создать программу, которая выполняет 4 разные функции, которые изменят работу оператора. Я просмотрел несколько примеров и наборов текста, которые показывают, как это сделать, но я не могу сделать, что означает какой-либо код. Для меня что-то вроде этого должно работать.Перегрузка оператора в C++

int operator++() 
{ 
    variableA--; 
} 

Для меня, это говорит, что если вы столкнулись с ++, а затем - из переменной, теперь очевидно, что это не работает, как это. Все примеры, которые я нашел, создают собственный тип данных. Есть ли способ перегрузить оператора, используя int или double?

+0

Перегрузка оператора намного более сложна, чем может предложить первоначальная интуиция. Ваш учитель должен был пережить это, прежде чем назначать вам упражнение на нем, так как это кажется довольно привлекательным вначале, и есть много особых случаев. Наверняка в вашей книге есть раздел. Нет простого способа обойтись, просто садясь и читая об этом. –

+0

Он никогда не обходил его, и у нас даже нет книг. Поэтому я прихожу сюда, чтобы попытаться найти помощь. – Cistoran

+0

Bummer. В этой бесплатной книге есть целая глава: [Мышление на C++] (http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html), глава 12. Стоит прочитать, хотя книга в целом только так -так. –

ответ

6

Все примеры создают свой собственный тип данных, поскольку это одно из правил перегрузки оператора: An overloaded operator must work on at least one user-defined type ,

Даже если вы можете перегрузить ++ для целых чисел, компилятор не будет знать, какой из них использовать - ваша версия или обычная версия; это было бы неоднозначно.

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

Таким образом, вы не можете перегружать ++, чтобы всегда делать что-то другое; это действительно было бы переопределением оператора, которое C++ не позволяет.

Вы можете определить ++ для типа вы создали, хотя:

class MyType { 
public: 
    int value; 
}; 

MyType const& operator++(MyType& m) { // Prefix 
    ++m.value; 
    return m; 
} 

const MyType operator++(MyType& m, int) { // Postfix (the 'int' is just to differentiate it from the prefix version) 
    MyType temp = m; 
    ++m.value; 
    return temp; 
} 

int main() { 
    MyType m; 
    m.value = 0; 
    m++; // Not m.value++ 
    cout << m.value; // Prints 1 
} 

Заметим, что этот набор ++ операторов был определен вне класса MyType, но можно было бы определить внутри вместо (они получили бы таким образом, доступ к непубличным членам), хотя их реализация будет немного отличаться.

+0

Самое превосходное, это в точности то, что я искал. Я получил +, - и/working, я думал о том, чтобы делать Mod, но это была, вероятно, больше работы, чем я предполагал. Очень признателен. – Cistoran

1

Вы не можете перегрузить операторы встроенных типов. (Ну, технически вы можете перегружать такие вещи, как «int + MyClass», но не тогда, когда обе стороны являются встроенными типами)

Смежные вопросы