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

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

Войти
Регистрация
Восстановить пароль
 
Lynatik001
38 / 32 / 4
Регистрация: 28.09.2012
Сообщений: 620
#1

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

29.03.2014, 22:34. Просмотров 298. Ответов 9
Метки нет (Все метки)

Захотел что бы вот так действовал плюс
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++ хочу попробовать всунуть "for (int j=0; j<5; j++)" в cin. Как это можно реализовать?
C++ "Угадай число" (напишите программу, хочу проверить со своей).
C++ Хочу static "с домином и монашками"
Game "Угадай число" как зделать запрет на "букви" ???? C++
Как из масива "а" записать данные в масив "б" но в обратном порядке C++
Как доказать, что при "а = b" на место "а" возвращается ссылка? C++
C++ Как сделать execl("my", "arg", argv)?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
29.03.2014, 22:40     Не перезагружает "+" как я хочу #2
Lynatik001, код класса riad сюда покажи

Цитата Сообщение от Lynatik001 Посмотреть сообщение
C++
1
asd.stroka= stroka.size + R.stroka.size;
А вообще вот тут уже несуразность. Складываешь размеры, а записываешь их в строку.
И еще не понятно почему ты ждешь что aaa будет 9. Тебе строки надо склеить (если так, то ааа должно быть "asddsa") или что?
Lynatik001
38 / 32 / 4
Регистрация: 28.09.2012
Сообщений: 620
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
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
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
38 / 32 / 4
Регистрация: 28.09.2012
Сообщений: 620
29.03.2014, 23:10  [ТС]     Не перезагружает "+" как я хочу #5
Цитата Сообщение от DrOffset Посмотреть сообщение
Хм. Ну у тебя и так будет общая длина, если ты просто склеишь строки. Как-то так:
да ясно то что можно узнать много как раз длину. Я просто думал что бы допустим при уравнении
C++
1
2
riad CB1("asd"),CB2("dsa"),CB3("dsw");
    riad aaa  = CB1 + CB2;
aaa = 9
короче я наверное не понял суть изменения оператора. Думал что таким способом можно изменить суть что мы обьединяем, то есть я например просто хотел таким способом обьеденить длину строк а не их значение.
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
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
38 / 32 / 4
Регистрация: 28.09.2012
Сообщений: 620
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
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
30.03.2014, 00:37     Не перезагружает "+" как я хочу #8
Lynatik001, ну так очевидно же, что в таком случае у нас aaa должен быть типа int. В общем определиться тебе нужно в том, что ты хочешь. До этих пор какой-то конкретный правильный совет, кроме как переписать класс riad сложно дать.
Сейчас же получается, что семантика твоего типа riad не формализована тобой же. Определи строгие рамки для его поведения. И тогда все встанет на свои места.
Lynatik001
38 / 32 / 4
Регистрация: 28.09.2012
Сообщений: 620
30.03.2014, 01:09  [ТС]     Не перезагружает "+" как я хочу #9
спасибо разобрался, уже работает как надо
Цитата Сообщение от DrOffset Посмотреть сообщение
Сейчас же получается, что семантика твоего типа riad не формализована тобой же. Определи строгие рамки для его поведения. И тогда все встанет на свои места.
Что то не понимаю, это ты о смысловом обозначении переменных? И в смысле определить строгие рамки поведения?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2014, 01:17     Не перезагружает "+" как я хочу
Еще ссылки по теме:
"Не хочу константу!" C++
Как использовать символы из русского алфавита, а так же символы типа "█" "░" и т.д.? C++
Как сделать константными значения "m" и "n" C++
Как "захватить" окно и нажать "Ok"? C++
Как сделать поле с "|", #, "-" и цифрами C++

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

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

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