Описание тега 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& operator<<(ostream& o,const Node& f) { Node *p = new Node(f.val); p->next = f.next; p->prev = f.prev; o << "["; 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 & _factor ) { setFactor(_factor); } SensorTrainDat…
21 сен '16 в 22:52
2
ответа
Постфиксный рекурсивный пользовательский оператор в swift
Я пытаюсь объявить пользовательский постфиксный оператор, который вычисляет факториал заданного числа, есть ли способ сделать эту функцию рекурсивной (число-1)!!? postfix operator !! {} postfix func !! (number: Double) -> Double { if (number <…
29 авг '15 в 18:37
0
ответов
Перегрузка подстрочного оператора на векторах<int> и векторах<bool> различий
Я пытаюсь реализовать операторы bitset в классе векторной оболочки. Мой вопрос заключается в том, почему подстрочный оператор [] работает, когда вектор представляет собой целое число, а не когда это логическое значение. struct bitsetI { vector<in…
22 сен '14 в 14:39
3
ответа
Оператор << для вложенного класса
Я пытаюсь перегрузить оператор << для вложенного класса ArticleIterator. // ... class ArticleContainer { public: class ArticleIterator { // ... friend ostream& operator<<(ostream& out, const ArticleIterator& artit); }; // ... }; Ес…
25 окт '10 в 14:13
1
ответ
Перегрузка операторов сравнения в C++, как сравнить с константными параметрами?
Меня просят перегрузить оператор сравнения для структуры. friend bool operator< (const ObjectID& id1, const ObjectID& 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<double> 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<< существуют перегрузки для basic_ostream"s char частичных специализация: template< class Traits > basic_ostream<char,Traits>& operator<<( basic_ostream<char,Traits>& …
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< в 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< int*, int > mymap; namespace std { template <> int & mymap::operator[]( c…
05 июл '16 в 15:47
4
ответа
C++: автоматически сгенерированный (по умолчанию) копировальный конструктор
Если я объявлю класс как, (без динамического выделения памяти, без указателя): class A{ int a,b; public: A(); A(int,int); A& 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