С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.94
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
#1

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

02.08.2014, 17:56. Просмотров 2434. Ответов 83
Метки нет (Все метки)

не получается в своем классе перегрузить оператор + пишет "error C2804: бинарный "operator +" имеет слишком много параметров", действительно задал 2 параметра, но как еще то? ведь + и подразумевает собой сложение 2х значений...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2014, 17:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка оператора + (C++):

Перегрузка оператора ‘=’ - C++
Подскажите, пожалуйста, можно ли как-то перегрузить оператор равно. Чтобы можно было его использовать как с правой, так и с левой...

Перегрузка оператора << - C++
Есть такой код. class matrix { public: ......; const double* operator(int) const; double* const operator(int); friend...

Перегрузка оператора - C++
Добрый день! Мне нужно перегрузить в классе двумерного массива оператор ++, чтобы она возвращал максимальный элемент массива. класс...

Перегрузка оператора + - C++
Не могу заставить работать перегруженный оператор + в функции CMoveByVector Point.h: #define POINT_H #include &lt;iostream&gt; ...

Перегрузка оператора = - C++
Ввести строку символов S1. Программа должна содержать перегруженную операцию “=”, использование которой скопирует S1 в S2 при следующих...

Перегрузка оператора + - C++
Помогите с перегрузкой оператора +. Нужно сложить два объекта - двумерные массивы. сArray operator + (сArray &amp;arr) { int size...

83
0x10
2484 / 1659 / 249
Регистрация: 24.11.2012
Сообщений: 4,136
02.08.2014, 21:35 #46
Цитата Сообщение от GetHelp Посмотреть сообщение
к другому объекту того же класса
Достаточное условие для доступа к приватной части. Класс знает свое внутреннее устройство -> знает внутренности других объектов своего же типа.
0
ValeryS
Модератор
6729 / 5138 / 485
Регистрация: 14.02.2011
Сообщений: 17,245
02.08.2014, 21:35 #47
Цитата Сообщение от GetHelp Посмотреть сообщение
выкидывает "Необработанное исключение по адресу 0x77ED40E3 (msvcr120d.dll) в string.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xCCCCCCCC." на строке 74
судя по Дллке ты пишешь в Вижуале
тогда при ошибке нажми продолжить
выскочит еще раз табличка, нажми остановить
тебя кинет в отладчик
там в окне стека можешь проследить кто бяку сделал
0
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
02.08.2014, 21:37  [ТС] #48
Цитата Сообщение от 0x10 Посмотреть сообщение
Достаточное условие для доступа к приватной части. Класс знает свое внутреннее устройство -> знает внутренности других объектов своего же типа.
аа все да был не прав, действительно доступ есть...

Добавлено через 54 секунды
ValeryS, она просто продолжает выскакивать
0
ValeryS
Модератор
6729 / 5138 / 485
Регистрация: 14.02.2011
Сообщений: 17,245
02.08.2014, 21:38 #49
Цитата Сообщение от GetHelp Посмотреть сообщение
str передана в параметре, класс обращается не сам к себе а к другому объекту того же класса
а теперь переведи
класс обращается к объекту
класс это описание
объект класса обращается к обращается к другому объекту того же класса
класс обращается к к классу
объекты разные описание одно
0
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
02.08.2014, 21:38  [ТС] #50
Цитата Сообщение от ValeryS Посмотреть сообщение
а теперь переведи
класс обращается к объекту
класс это описание
объект класса обращается к обращается к другому объекту того же класса
класс обращается к к классу
объекты разные описание одно
ага ок уже понял...
0
ValeryS
Модератор
6729 / 5138 / 485
Регистрация: 14.02.2011
Сообщений: 17,245
02.08.2014, 21:39 #51
Цитата Сообщение от GetHelp Посмотреть сообщение
ValeryS, она просто продолжает выскакивать
вот когда продолжает выскакивать нажми остановить, или как там называется
у каждой версии свои имена
0
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
02.08.2014, 21:43  [ТС] #52
Цитата Сообщение от ValeryS Посмотреть сообщение
вот когда продолжает выскакивать нажми остановить, или как там называется
нету такого...
0
Миниатюры
Перегрузка оператора +  
ValeryS
Модератор
6729 / 5138 / 485
Регистрация: 14.02.2011
Сообщений: 17,245
02.08.2014, 21:48 #53
тогда "Прервать"
но только на второй раз
иначе программа просто перестанет работать
0
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
02.08.2014, 21:50  [ТС] #54
Цитата Сообщение от ValeryS Посмотреть сообщение
тогда "Прервать"
но только на второй раз
иначе программа просто перестанет работать
так и есть... как не колдуй просто окошко с исключением закрывается и программа стоит...
0
-=ЮрА=-
Заблокирован
Автор FAQ
02.08.2014, 21:51 #55
GetHelp, вот код на быструю руку, я не стал править ваш класс, а написал то что "must have" в классе строка http://codepad.org/tyByCrJp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream>
using namespace std;
 
class String
{
protected :
    char * text;
    long   size;
public:
    String(){
        text = 0;
        size = 0; 
    }
    String(const char * str = 0) {
        if( str )
        {
            size = strlen(str);
            text = new char[1 + size];
            size = sprintf(text, "%s", str);
            text[size] = 0;
        }
        else
        {
            text = 0;
            size = 0;
        }
    }
    String(const String &pCopy){
        size = pCopy.size;
        text = new char[1 + size];
        size = sprintf(text, "%s", pCopy.text);
        text[size] = 0;
    }
    String operator + (const char * str) {
        char * buf = text;
        size= strlen(str);
        text = new char[1 + size];
        if( buf )
        size = sprintf(text, "%s%s",buf, str);
        else    
        size = sprintf(text, "%s", str);
        text[size] = 0;
        return *this;
    }
    String operator + (const String &pCopy){
        return operator + (pCopy.text);
    }
    char * get_text(){return text;}
    long   get_size(){return size;}
};
 
int main(){
    String str = "test";
    cout<<str.get_text()<<endl;
    str =  str + "data";
    cout<<str.get_text()<<endl;
    str = String("next") + "test";
    cout<<str.get_text()<<endl;
    return 0;
}
Output:
test
testdata
nexttest
0
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
02.08.2014, 21:51  [ТС] #56
да фиг с ним с отладчиком... врятли я что то найду полезное в ассемблерном коде... тут нужно мой код смотреть, я вот пока не вижу ошибок... может вы увидите...
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
02.08.2014, 21:53 #57
Не надо выделять через calloc/malloc/realloc, а освобождать через delete. Это совершенно разные механизмы.
Выделяешь malloc - освобождай free. Выделяешь new - освобождаешь delete.
2
ValeryS
Модератор
6729 / 5138 / 485
Регистрация: 14.02.2011
Сообщений: 17,245
02.08.2014, 22:00 #58
Цитата Сообщение от Tulosba Посмотреть сообщение
Не надо выделять через calloc/malloc/realloc, а освобождать через delete.
а я этого не заметил
Цитата Сообщение от GetHelp Посмотреть сообщение
да фиг с ним с отладчиком...
ну это ты, сгоряча
Цитата Сообщение от GetHelp Посмотреть сообщение
врятли я что то найду полезное в ассемблерном коде...
там не ассемблерный а вполне себе сишный код, что написал то и высветится
Цитата Сообщение от GetHelp Посмотреть сообщение
просто окошко с исключением закрывается и программа стоит...
покажи как стоит? может ты уже в отладчик залез
0
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
02.08.2014, 22:07  [ТС] #59
-=ЮрА=-, так уже интересно, кое что полезное взял, но не могу протестить, вы забыли дописать перегрузку оператора присваивания на ней у меня как раз сейчас все стопорится... а она точно нужна...
Цитата Сообщение от Tulosba Посмотреть сообщение
Не надо выделять через calloc/malloc/realloc, а освобождать через delete. Это совершенно разные механизмы.
Выделяешь malloc - освобождай free. Выделяешь new - освобождаешь delete.
хз я где то читал вроде что delete вызывает free сама... так что большой разницы наверно нет... но ладно можно и так, просто я переодически путаю си и си++
Цитата Сообщение от ValeryS Посмотреть сообщение
покажи как стоит? может ты уже в отладчик залез
я же показал... так и стоит и никуда не двигается
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
02.08.2014, 22:13 #60
Цитата Сообщение от GetHelp Посмотреть сообщение
я где то читал вроде что delete вызывает free сама
То, что происходит за кулисами это уже совсем другая история.
Цитата Сообщение от GetHelp Посмотреть сообщение
просто я переодически путаю си и си++
А вот это уже похоже на правду В плюсах постарайтесь забыть про malloc/free.
0
02.08.2014, 22:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2014, 22:13
Привет! Вот еще темы с ответами:

Перегрузка оператора << - C++
Пишу класс My_String #include &lt;iostream&gt; const int MAX = 1000; class My_String { private: char str; public:

Перегрузка оператора += - C++
Есть два класса: Vec4(вектор из 4х float) и Mat4(вектор из 4х Vec4). Проблема в том что при перегрузке в Mat4 операции += я получаю ошибку...

Перегрузка оператора = - C++
Здравствуйте! При попытке заменить объект пользовательского класса q4 на q6 в контейнере set появляется ошибка: error C2678: binary '=' :...

Перегрузка оператора - C++
Здравствуйте, друзья. Помогите пожалуйста найти ошибку, вернее я знаю где, но пока не понимаю как её исправить: //Добавить в строковый...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.