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

Не перезагружает "+" как я хочу - C++

Восстановить пароль Регистрация
 
Lynatik001
 Аватар для Lynatik001
34 / 28 / 2
Регистрация: 28.09.2012
Сообщений: 560
29.03.2014, 22:34     Не перезагружает "+" как я хочу #1
Захотел что бы вот так действовал плюс
C++
1
2
    riad CB1("asd"),CB2("dsa"),CB3("dsw");
    riad aaa  = CB1 + CB2;
ааа == 9 в идеале это хотел увидеть...
Посмотрел примерчики вот сделал так..
C++
1
2
3
4
5
    riad riad::operator+(const riad &R){
         riad asd;
         asd.stroka=  stroka.size + R.stroka.size;
         return asd;
    }
и покатились ошибка, как то не могу ее решить....
error C2297: '+' : illegal, right operand has type 'unsigned int (__thiscall std::basic_string<_Elem,_Traits,_Alloc>::* )(void) throw() const'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Alloc=std::allocator<char>
1> ]
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2014, 22:34     Не перезагружает "+" как я хочу
Посмотрите здесь:

C++ "Угадай число" (напишите программу, хочу проверить со своей).
C++ Необработанное исключение в "0x54a2d2e9 (msvcr100d.dll)" в "3.exe": 0xC0000005: Нарушение прав доступа при записи "0xcccccccc".
Необработанное исключение в "0x1027c9c7 (msvcr100d.dll)" в "gh.exe": 0xC0000005: Нарушение прав доступа при чтении "0xfeeefeee". C++
C++ хочу попробовать всунуть "for (int j=0; j<5; j++)" в cin. Как это можно реализовать?
C++ как сделать "Старт", "Пауза", Стоп".
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6460 / 3834 / 885
Регистрация: 30.01.2014
Сообщений: 6,629
29.03.2014, 22:40     Не перезагружает "+" как я хочу #2
Lynatik001, код класса riad сюда покажи

Цитата Сообщение от Lynatik001 Посмотреть сообщение
C++
1
asd.stroka= stroka.size + R.stroka.size;
А вообще вот тут уже несуразность. Складываешь размеры, а записываешь их в строку.
И еще не понятно почему ты ждешь что aaa будет 9. Тебе строки надо склеить (если так, то ааа должно быть "asddsa") или что?
Lynatik001
 Аватар для Lynatik001
34 / 28 / 2
Регистрация: 28.09.2012
Сообщений: 560
29.03.2014, 22:47  [ТС]     Не перезагружает "+" как я хочу #3
Цитата Сообщение от DrOffset Посмотреть сообщение
код класса riad сюда покажи
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
#include "stdafx.h"
#include "riad.h"
 
    riad::riad(){
        stroka = "";
    }
    riad::riad(string a){
        stroka = a;
    }
    riad::riad(riad &b){
        stroka = b.stroka;
    }
    int riad::leght(string a){
        int q = a.length();
        return q;
    }
    void riad::view(string a){
        cout << a << endl;
    }
    riad riad::operator+(const riad &R){
         riad asd;
         asd.stroka=  stroka.size + R.stroka.size;
         return asd;
    }
Добавлено через 3 минуты
Цитата Сообщение от DrOffset Посмотреть сообщение
А вообще вот тут уже несуразность. Складываешь размеры, а записываешь их в строку.
И еще не понятно почему ты ждешь что aaa будет 9. Тебе строки надо склеить (если так, то ааа должно быть "asddsa") или что?
я хотел что бы при обьект(строка) + обьект(строка) = общая длина обеих строк
DrOffset
6460 / 3834 / 885
Регистрация: 30.01.2014
Сообщений: 6,629
29.03.2014, 22:56     Не перезагружает "+" как я хочу #4
Цитата Сообщение от Lynatik001 Посмотреть сообщение
я хотел что бы при обьект(строка) + обьект(строка) = общая длина обеих строк
Хм. Ну у тебя и так будет общая длина, если ты просто склеишь строки. Как-то так:
C++
1
2
3
4
5
6
riad riad::operator+(const riad &R){
         riad asd;
         asd.stroka = stroka + R.stroka;
         asd.size = asd.stroka.size();
         return asd;
}
Но вообще, судя по коду, который ты привел (я кстати определение класса просил, а не реализацию), у тебя там многовато ошибок и неточностей.
Lynatik001
 Аватар для Lynatik001
34 / 28 / 2
Регистрация: 28.09.2012
Сообщений: 560
29.03.2014, 23:10  [ТС]     Не перезагружает "+" как я хочу #5
Цитата Сообщение от DrOffset Посмотреть сообщение
Хм. Ну у тебя и так будет общая длина, если ты просто склеишь строки. Как-то так:
да ясно то что можно узнать много как раз длину. Я просто думал что бы допустим при уравнении
C++
1
2
riad CB1("asd"),CB2("dsa"),CB3("dsw");
    riad aaa  = CB1 + CB2;
aaa = 9
короче я наверное не понял суть изменения оператора. Думал что таким способом можно изменить суть что мы обьединяем, то есть я например просто хотел таким способом обьеденить длину строк а не их значение.
DrOffset
6460 / 3834 / 885
Регистрация: 30.01.2014
Сообщений: 6,629
29.03.2014, 23:17     Не перезагружает "+" как я хочу #6
Цитата Сообщение от Lynatik001 Посмотреть сообщение
aaa = 9
Только не 9, а 6. Две строки по три символа == 6

Цитата Сообщение от Lynatik001 Посмотреть сообщение
короче я наверное не понял суть изменения оператора. Думал что таким способом можно изменить суть что мы обьединяем, то есть я например просто хотел таким способом обьеденить длину строк а не их значение.
Налицо логическое противоречие. Если нужно просто объединить длину строк, то возвращать нужно не riad, а int.
C++
1
2
3
int riad::operator+(const riad &R){
         return stroka.size() + R.stroka.size();
}
Если же ты возвращаешь riad, то логично помещать туда склеенную строку. А не просто новый размер.
Lynatik001
 Аватар для Lynatik001
34 / 28 / 2
Регистрация: 28.09.2012
Сообщений: 560
29.03.2014, 23:39  [ТС]     Не перезагружает "+" как я хочу #7
Цитата Сообщение от DrOffset Посмотреть сообщение
Если же ты возвращаешь riad, то логично помещать туда склеенную строку. А не просто новый размер.
ну тут уже что то типа вот такой ошибки видает
C++
1
riad aaa  = CB1 + CB2;
CB1 подчеркивает.... ясно что конвертировать, пробывал но чет не выходит
error C2440: 'initializing' : cannot convert from 'int' to 'riad'
DrOffset
6460 / 3834 / 885
Регистрация: 30.01.2014
Сообщений: 6,629
30.03.2014, 00:37     Не перезагружает "+" как я хочу #8
Lynatik001, ну так очевидно же, что в таком случае у нас aaa должен быть типа int. В общем определиться тебе нужно в том, что ты хочешь. До этих пор какой-то конкретный правильный совет, кроме как переписать класс riad сложно дать.
Сейчас же получается, что семантика твоего типа riad не формализована тобой же. Определи строгие рамки для его поведения. И тогда все встанет на свои места.
Lynatik001
 Аватар для Lynatik001
34 / 28 / 2
Регистрация: 28.09.2012
Сообщений: 560
30.03.2014, 01:09  [ТС]     Не перезагружает "+" как я хочу #9
спасибо разобрался, уже работает как надо
Цитата Сообщение от DrOffset Посмотреть сообщение
Сейчас же получается, что семантика твоего типа riad не формализована тобой же. Определи строгие рамки для его поведения. И тогда все встанет на свои места.
Что то не понимаю, это ты о смысловом обозначении переменных? И в смысле определить строгие рамки поведения?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2014, 01:17     Не перезагружает "+" как я хочу
Еще ссылки по теме:

C++ Подскажите как перегрузить операторы ">>", "<<" и "="
C++ Хочу static "с домином и монашками"
C++ Как отключить автоматическое добавление "_" "@" "number" к имени экстернального метода?

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

Или воспользуйтесь поиском по форуму:
DrOffset
6460 / 3834 / 885
Регистрация: 30.01.2014
Сообщений: 6,629
30.03.2014, 01:17     Не перезагружает "+" как я хочу #10
Цитата Сообщение от Lynatik001 Посмотреть сообщение
Что то не понимаю, это ты о смысловом обозначении переменных? И в смысле определить строгие рамки поведения)
Определить что класс может и должен делать, а что нет.
Вот взять хотя бы твой пример. Ты говоришь, хочу сложить два объекта, через собственный оператор+. Хорошо, складываем. Ты говоришь, что при этом он должен складывать только размер. Окей. Но в классе есть еще и строка. Мы сложили размер, а строка в новом объекте, полученном после сложения чему должна быть равна - непонятно. Я тебе предложил вариант, чтобы строка склеивалась при сложении, но ты мне дал понять, что хочешь не этого. Тогда очевидно, что здесь логическая нестыковка. Тогда нужно либо разнести сущности. Реализовать класс "строка" и определить в нем операции, характерные для строк. И организовать класс "размер", который будет заниматься подсчетом размеров у "строк". Тогда каждый будет заниматься свои делом и путаницы не будет. Именно четкое представление тобой того, какой класс чем должен заниматься я и имел в виду под "определить строгие рамки поведения". Либо пойти по предложенному мной пути и таки склеивать строки, а общий размер брать уже у этой склеенной строки.
Yandex
Объявления
30.03.2014, 01:17     Не перезагружает "+" как я хочу
Ответ Создать тему
Опции темы

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