Описание тега operator-overloading

Перегрузка операторов - это функция языка программирования, которая позволяет настраивать реализации операторов в зависимости от типов задействованных операндов. Некоторые языки позволяют определять новые операторы, в то время как другие позволяют только переопределение существующих.
2 ответа

Перегрузка оператора +=

Я должен написать оператор перегрузки += но я не знаю, как сделать это правильно (я начал писать в конце кода, это было неправильно, поэтому я удаляю все, кроме вы видите). #include <iostream> using namespace std; class dek { private: int *x,n…
01 мар '12 в 18:01
1 ответ

Ошибка вызова пользовательского оператора + для временного объекта при наличии дополнительных скобок

Если у меня есть пользовательский operator+() как в: class A { public: A operator+(A) { return A(); } }; Тогда следующее работает как ожидалось: A a = A() + A(); но g++-4.7 выдает сообщение об ошибке следующего: A a = (A()) + A(); В частности, сообщ…
20 май '13 в 03:20
3 ответа

Использование конструктора копирования в операторе присваивания

Это противоречит руководству по стилю использовать конструктор копирования в операторе присваивания? То есть: const Obj & Obj::operator=(const Obj & source) { if (this == &source) { return *this; } // deep copy using copy-constructor Obj…
14 сен '14 в 05:14
2 ответа

Компилятор не использует оператор <<

У меня возникла небольшая проблема с добавлением связанного списка в оператор <<. Вот код: ostream&amp; operator&lt;&lt;(ostream&amp; o,const Node&amp; f) { Node *p = new Node(f.val); p-&gt;next = f.next; p-&gt;prev = f.prev; o &lt;&lt; "["; while(p…
15 окт '15 в 11:46
1 ответ

C++ Не удается найти ошибку, двойное освобождение или повреждение (fasttop)

Я получаю следующий вывод из моей программы: $ ./list Enter list 1: [1,2,3,4] [ Enter list 2: [2,5,8,0] [ [1,2,3,4] [1,2,3,4] *** Error in `./list': double free or corruption (fasttop): 0x0000000000f85100 *** ======= Backtrace: ========= /lib/x86_64…
16 авг '13 в 22:10
1 ответ

C++ передает экземпляр класса как переменную типа float в libconfig++:: lookupValue()

У меня есть этот маленький класс, который вращается вокруг одной двойной переменной class SensorTrainData { public: SensorTrainData() : trainingRangeFactor(2.0f) {} SensorTrainData( const double &amp; _factor ) { setFactor(_factor); } SensorTrainDat…
21 сен '16 в 22:52
2 ответа

Постфиксный рекурсивный пользовательский оператор в swift

Я пытаюсь объявить пользовательский постфиксный оператор, который вычисляет факториал заданного числа, есть ли способ сделать эту функцию рекурсивной (число-1)!!? postfix operator !! {} postfix func !! (number: Double) -&gt; Double { if (number &lt;…
29 авг '15 в 18:37
0 ответов

Перегрузка подстрочного оператора на векторах<int> и векторах<bool> различий

Я пытаюсь реализовать операторы bitset в классе векторной оболочки. Мой вопрос заключается в том, почему подстрочный оператор [] работает, когда вектор представляет собой целое число, а не когда это логическое значение. struct bitsetI { vector&lt;in…
22 сен '14 в 14:39
3 ответа

Оператор << для вложенного класса

Я пытаюсь перегрузить оператор << для вложенного класса ArticleIterator. // ... class ArticleContainer { public: class ArticleIterator { // ... friend ostream&amp; operator&lt;&lt;(ostream&amp; out, const ArticleIterator&amp; artit); }; // ... }; Ес…
25 окт '10 в 14:13
1 ответ

Перегрузка операторов сравнения в C++, как сравнить с константными параметрами?

Меня просят перегрузить оператор сравнения для структуры. friend bool operator&lt; (const ObjectID&amp; id1, const ObjectID&amp; id2); Нужно ли рассматривать для сравнения случаи, когда либо id1 или id2 const? Как реализовать тогда?
28 апр '15 в 19:45
3 ответа

Почему я могу использовать списки инициализаторов в правой части оператора +=, но не оператора +?

Это продолжение предыдущего вопроса о том, почему я не могу использовать инициализатор в скобках в качестве аргумента operator+, который был решен путем рассмотрения этого более раннего вопроса на эту тему. Рассмотрим следующий код C++, который вы м…
04 мар '17 в 23:01
1 ответ

Перегрузка операций в композитном шаблоне проектирования в C++

Предположим, у меня есть весь этот код: class Function { public: virtual double eval(double x) const =0; }; class Polynomial : public Function { private: std::vector&lt;double&gt; coefficients; public: // ... }; class CompositeFunction : public Func…
26 сен '14 в 00:23
1 ответ

Оператор C++ () и объявление "using": левый операнд должен содержать ошибку l-значения

Пример ниже иллюстрирует более сложную, но не похожую проблему, которую я пытался решить элегантно. У меня есть набор шаблонов, которые должны быть специализированными, и при этом реализовать один или оба из двух интерфейсов: Readable и Writable, в …
04 янв '12 в 03:43
2 ответа

Почему существуют перегрузки 'operator<<' для частичных специализаций 'char' в std:: basic_ostream?

Я хотел бы знать, почему следующее operator&lt;&lt; существуют перегрузки для basic_ostream"s char частичных специализация: template&lt; class Traits &gt; basic_ostream&lt;char,Traits&gt;&amp; operator&lt;&lt;( basic_ostream&lt;char,Traits&gt;&amp; …
19 фев '13 в 16:03
1 ответ

Правильно перегружаем opIndexAssign

Из справочника по языку D opIndexAssign имеет подпись: type opIndexAssign(type value, size_t index0, ...); Каково будет значение возвращаемого значения, поскольку в нем говорится, что такие утверждения, как: Class[1, 3] = 5; эквивалентно: Class.opIn…
03 ноя '15 в 15:24
1 ответ

Сортировать с переопределением оператора не получается я хочу

Я пытаюсь отсортировать человека вектор по person.name и возрасту. Поэтому я попытался переопределить operator&lt; в Person определение, и использовать функтор с std::sort(), Однако я не получил то, что хочу. Я ожидаю, что люди сначала упорядочены п…
07 июл '17 в 02:15
1 ответ

Объявление друга шаблонного оператора * с оператором-членом *

Прикрепленный к этому вопросу код не компилируется (g++ 4.7) со следующими ошибками: test.cpp:22:31: error: declaration of ‘operator*’ as non-function test.cpp:22:31: error: expected ‘;’ at end of member declaration test.cpp:22:32: error: expected u…
19 янв '14 в 19:21
3 ответа

Перегрузка оператора [] в шаблоне

Я пытаюсь перегрузить operator[] для экземпляра std:: map и серьезно озадачен ошибками компиляции из GCC. Следующий пример не скомпилируется: typedef std::map&lt; int*, int &gt; mymap; namespace std { template &lt;&gt; int &amp; mymap::operator[]( c…
05 июл '16 в 15:47
4 ответа

C++: автоматически сгенерированный (по умолчанию) копировальный конструктор

Если я объявлю класс как, (без динамического выделения памяти, без указателя): class A{ int a,b; public: A(); A(int,int); A&amp; operator=(const A); }; Безопасно ли не объявлять конструктор копирования? Как выглядит конструктор копирования по умолча…
07 фев '13 в 14:58
3 ответа

C++ оператор перегрузки массива

Я создаю кучу, вот так: struct Heap{ int H[100]; int operator [] (int i){return H[i];} //... }; Когда я пытаюсь распечатать элементы из него, я делаю так: Heap h; //add some elements... printf("%d\n", h[3]); //instead of h.H[3] У меня вопрос, если в…
05 май '16 в 05:30