Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.94
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
02.08.2014, 17:56     Перегрузка оператора + #1
не получается в своем классе перегрузить оператор + пишет "error C2804: бинарный "operator +" имеет слишком много параметров", действительно задал 2 параметра, но как еще то? ведь + и подразумевает собой сложение 2х значений...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2014, 17:56     Перегрузка оператора +
Посмотрите здесь:

Перегрузка оператора C++
C++ Перегрузка оператора +=
Перегрузка оператора = C++
Перегрузка оператора * C++
Перегрузка оператора ~ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
02.08.2014, 21:28     Перегрузка оператора + #41
Цитата Сообщение от GetHelp Посмотреть сообщение
Необработанное исключение по адресу 0x77ED40E3 (msvcr120d.dll) в string.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xCCCCCCCC."
где то память не выделилась
указатель есть но указывает в космос
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
02.08.2014, 21:29  [ТС]     Перегрузка оператора + #42
Цитата Сообщение от ValeryS Посмотреть сообщение
А зачем ты здесь вызываешь метод???
можно так
C++
1
size = str.size;
Цитата Сообщение от ValeryS Посмотреть сообщение
C++
1
strcpy(ptr, str.ptr);
ну может потому что у меня size и ptr не в protected секции... хотя возможно действительно есть смысл их туда перенести...
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
02.08.2014, 21:32     Перегрузка оператора + #43
Цитата Сообщение от GetHelp Посмотреть сообщение
ну может потому что у меня size и ptr не в protected секции...
класс обращается сам к себе
может лезть куда угодно, даже к приватным
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
02.08.2014, 21:32     Перегрузка оператора + #44
Цитата Сообщение от GetHelp Посмотреть сообщение
у меня size и ptr не в protected секции
protected - имеет смысл в случае иерархии. Тут класс один -> нет повода для протектеда совсем.
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
02.08.2014, 21:34  [ТС]     Перегрузка оператора + #45
Цитата Сообщение от ValeryS Посмотреть сообщение
класс обращается сам к себе
может лезть куда угодно, даже к приватным
str передана в параметре, класс обращается не сам к себе а к другому объекту того же класса

Добавлено через 54 секунды
Цитата Сообщение от 0x10 Посмотреть сообщение
protected - имеет смысл в случае иерархии. Тут класс один -> нет повода для протектеда совсем.
если не будет protected то как ты будешь к str обращаться? нету там доступа к private членам...
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
02.08.2014, 21:35     Перегрузка оператора + #46
Цитата Сообщение от GetHelp Посмотреть сообщение
к другому объекту того же класса
Достаточное условие для доступа к приватной части. Класс знает свое внутреннее устройство -> знает внутренности других объектов своего же типа.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
02.08.2014, 21:35     Перегрузка оператора + #47
Цитата Сообщение от GetHelp Посмотреть сообщение
выкидывает "Необработанное исключение по адресу 0x77ED40E3 (msvcr120d.dll) в string.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xCCCCCCCC." на строке 74
судя по Дллке ты пишешь в Вижуале
тогда при ошибке нажми продолжить
выскочит еще раз табличка, нажми остановить
тебя кинет в отладчик
там в окне стека можешь проследить кто бяку сделал
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
02.08.2014, 21:37  [ТС]     Перегрузка оператора + #48
Цитата Сообщение от 0x10 Посмотреть сообщение
Достаточное условие для доступа к приватной части. Класс знает свое внутреннее устройство -> знает внутренности других объектов своего же типа.
аа все да был не прав, действительно доступ есть...

Добавлено через 54 секунды
ValeryS, она просто продолжает выскакивать
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
02.08.2014, 21:38     Перегрузка оператора + #49
Цитата Сообщение от GetHelp Посмотреть сообщение
str передана в параметре, класс обращается не сам к себе а к другому объекту того же класса
а теперь переведи
класс обращается к объекту
класс это описание
объект класса обращается к обращается к другому объекту того же класса
класс обращается к к классу
объекты разные описание одно
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
02.08.2014, 21:38  [ТС]     Перегрузка оператора + #50
Цитата Сообщение от ValeryS Посмотреть сообщение
а теперь переведи
класс обращается к объекту
класс это описание
объект класса обращается к обращается к другому объекту того же класса
класс обращается к к классу
объекты разные описание одно
ага ок уже понял...
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
02.08.2014, 21:39     Перегрузка оператора + #51
Цитата Сообщение от GetHelp Посмотреть сообщение
ValeryS, она просто продолжает выскакивать
вот когда продолжает выскакивать нажми остановить, или как там называется
у каждой версии свои имена
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
02.08.2014, 21:43  [ТС]     Перегрузка оператора + #52
Цитата Сообщение от ValeryS Посмотреть сообщение
вот когда продолжает выскакивать нажми остановить, или как там называется
нету такого...
Миниатюры
Перегрузка оператора +  
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
02.08.2014, 21:48     Перегрузка оператора + #53
тогда "Прервать"
но только на второй раз
иначе программа просто перестанет работать
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
02.08.2014, 21:50  [ТС]     Перегрузка оператора + #54
Цитата Сообщение от ValeryS Посмотреть сообщение
тогда "Прервать"
но только на второй раз
иначе программа просто перестанет работать
так и есть... как не колдуй просто окошко с исключением закрывается и программа стоит...
-=ЮрА=-
Заблокирован
Автор 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
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
02.08.2014, 21:51  [ТС]     Перегрузка оператора + #56
да фиг с ним с отладчиком... врятли я что то найду полезное в ассемблерном коде... тут нужно мой код смотреть, я вот пока не вижу ошибок... может вы увидите...
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
02.08.2014, 21:53     Перегрузка оператора + #57
Не надо выделять через calloc/malloc/realloc, а освобождать через delete. Это совершенно разные механизмы.
Выделяешь malloc - освобождай free. Выделяешь new - освобождаешь delete.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
02.08.2014, 22:00     Перегрузка оператора + #58
Цитата Сообщение от Tulosba Посмотреть сообщение
Не надо выделять через calloc/malloc/realloc, а освобождать через delete.
а я этого не заметил
Цитата Сообщение от GetHelp Посмотреть сообщение
да фиг с ним с отладчиком...
ну это ты, сгоряча
Цитата Сообщение от GetHelp Посмотреть сообщение
врятли я что то найду полезное в ассемблерном коде...
там не ассемблерный а вполне себе сишный код, что написал то и высветится
Цитата Сообщение от GetHelp Посмотреть сообщение
просто окошко с исключением закрывается и программа стоит...
покажи как стоит? может ты уже в отладчик залез
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
02.08.2014, 22:07  [ТС]     Перегрузка оператора + #59
-=ЮрА=-, так уже интересно, кое что полезное взял, но не могу протестить, вы забыли дописать перегрузку оператора присваивания на ней у меня как раз сейчас все стопорится... а она точно нужна...
Цитата Сообщение от Tulosba Посмотреть сообщение
Не надо выделять через calloc/malloc/realloc, а освобождать через delete. Это совершенно разные механизмы.
Выделяешь malloc - освобождай free. Выделяешь new - освобождаешь delete.
хз я где то читал вроде что delete вызывает free сама... так что большой разницы наверно нет... но ладно можно и так, просто я переодически путаю си и си++
Цитата Сообщение от ValeryS Посмотреть сообщение
покажи как стоит? может ты уже в отладчик залез
я же показал... так и стоит и никуда не двигается
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2014, 22:13     Перегрузка оператора +
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
02.08.2014, 22:13     Перегрузка оператора + #60
Цитата Сообщение от GetHelp Посмотреть сообщение
я где то читал вроде что delete вызывает free сама
То, что происходит за кулисами это уже совсем другая история.
Цитата Сообщение от GetHelp Посмотреть сообщение
просто я переодически путаю си и си++
А вот это уже похоже на правду В плюсах постарайтесь забыть про malloc/free.
Yandex
Объявления
02.08.2014, 22:13     Перегрузка оператора +
Ответ Создать тему
Опции темы

Текущее время: 09:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru