Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Lynatik001
38 / 32 / 13
Регистрация: 28.09.2012
Сообщений: 626
1

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

29.03.2014, 22:34. Просмотров 348. Ответов 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> ]
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2014, 22:34
Ответы с готовыми решениями:

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно"
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить...

хочу попробовать всунуть "for (int j=0; j<5; j++)" в cin. Как это можно реализовать?
int main() { const int Mass =5; int a; for (int j=0; j&lt;5; j++) { ...

Для каждой строки найти слова, которые не имеют ни одного из букв: "l", "k", "r", "s" i "j"
Задано символьные строки. Строка состоит из нескольких слов (наборов символов),...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование)
Разработать программу с использованием наследования классов, реализующую...

Как отключить автоматическое добавление "_" "@" "number" к имени экстернального метода?
Здраствуйте! Подскажите как это делается? (вопрос в названии темы) среда :...

9
DrOffset
8466 / 4743 / 1161
Регистрация: 30.01.2014
Сообщений: 7,733
29.03.2014, 22:40 2
Lynatik001, код класса riad сюда покажи

Цитата Сообщение от Lynatik001 Посмотреть сообщение
C++
1
asd.stroka= stroka.size + R.stroka.size;
А вообще вот тут уже несуразность. Складываешь размеры, а записываешь их в строку.
И еще не понятно почему ты ждешь что aaa будет 9. Тебе строки надо склеить (если так, то ааа должно быть "asddsa") или что?
1
Lynatik001
38 / 32 / 13
Регистрация: 28.09.2012
Сообщений: 626
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") или что?
я хотел что бы при обьект(строка) + обьект(строка) = общая длина обеих строк
0
DrOffset
8466 / 4743 / 1161
Регистрация: 30.01.2014
Сообщений: 7,733
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;
}
Но вообще, судя по коду, который ты привел (я кстати определение класса просил, а не реализацию), у тебя там многовато ошибок и неточностей.
1
Lynatik001
38 / 32 / 13
Регистрация: 28.09.2012
Сообщений: 626
29.03.2014, 23:10  [ТС] 5
Цитата Сообщение от DrOffset Посмотреть сообщение
Хм. Ну у тебя и так будет общая длина, если ты просто склеишь строки. Как-то так:
да ясно то что можно узнать много как раз длину. Я просто думал что бы допустим при уравнении
C++
1
2
riad CB1("asd"),CB2("dsa"),CB3("dsw");
    riad aaa  = CB1 + CB2;
aaa = 9
короче я наверное не понял суть изменения оператора. Думал что таким способом можно изменить суть что мы обьединяем, то есть я например просто хотел таким способом обьеденить длину строк а не их значение.
0
DrOffset
8466 / 4743 / 1161
Регистрация: 30.01.2014
Сообщений: 7,733
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, то логично помещать туда склеенную строку. А не просто новый размер.
1
Lynatik001
38 / 32 / 13
Регистрация: 28.09.2012
Сообщений: 626
29.03.2014, 23:39  [ТС] 7
Цитата Сообщение от DrOffset Посмотреть сообщение
Если же ты возвращаешь riad, то логично помещать туда склеенную строку. А не просто новый размер.
ну тут уже что то типа вот такой ошибки видает
C++
1
riad aaa  = CB1 + CB2;
CB1 подчеркивает.... ясно что конвертировать, пробывал но чет не выходит
error C2440: 'initializing' : cannot convert from 'int' to 'riad'
0
DrOffset
8466 / 4743 / 1161
Регистрация: 30.01.2014
Сообщений: 7,733
30.03.2014, 00:37 8
Lynatik001, ну так очевидно же, что в таком случае у нас aaa должен быть типа int. В общем определиться тебе нужно в том, что ты хочешь. До этих пор какой-то конкретный правильный совет, кроме как переписать класс riad сложно дать.
Сейчас же получается, что семантика твоего типа riad не формализована тобой же. Определи строгие рамки для его поведения. И тогда все встанет на свои места.
1
Lynatik001
38 / 32 / 13
Регистрация: 28.09.2012
Сообщений: 626
30.03.2014, 01:09  [ТС] 9
спасибо разобрался, уже работает как надо
Цитата Сообщение от DrOffset Посмотреть сообщение
Сейчас же получается, что семантика твоего типа riad не формализована тобой же. Определи строгие рамки для его поведения. И тогда все встанет на свои места.
Что то не понимаю, это ты о смысловом обозначении переменных? И в смысле определить строгие рамки поведения?
0
DrOffset
8466 / 4743 / 1161
Регистрация: 30.01.2014
Сообщений: 7,733
30.03.2014, 01:17 10
Цитата Сообщение от Lynatik001 Посмотреть сообщение
Что то не понимаю, это ты о смысловом обозначении переменных? И в смысле определить строгие рамки поведения)
Определить что класс может и должен делать, а что нет.
Вот взять хотя бы твой пример. Ты говоришь, хочу сложить два объекта, через собственный оператор+. Хорошо, складываем. Ты говоришь, что при этом он должен складывать только размер. Окей. Но в классе есть еще и строка. Мы сложили размер, а строка в новом объекте, полученном после сложения чему должна быть равна - непонятно. Я тебе предложил вариант, чтобы строка склеивалась при сложении, но ты мне дал понять, что хочешь не этого. Тогда очевидно, что здесь логическая нестыковка. Тогда нужно либо разнести сущности. Реализовать класс "строка" и определить в нем операции, характерные для строк. И организовать класс "размер", который будет заниматься подсчетом размеров у "строк". Тогда каждый будет заниматься свои делом и путаницы не будет. Именно четкое представление тобой того, какой класс чем должен заниматься я и имел в виду под "определить строгие рамки поведения". Либо пойти по предложенному мной пути и таки склеивать строки, а общий размер брать уже у этой склеенной строки.
1
30.03.2014, 01:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2014, 01:17

Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления"
Помогите с кодом написания задачи, не понимаю как написать классы в классе. ...

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания"
Создать класс Книга поля: название книги,количество страниц,год издания...

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс"
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран...


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

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

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