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

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

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

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

29.03.2014, 22:34. Просмотров 331. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Не перезагружает "+" как я хочу (C++):

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

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

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

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

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

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

9
DrOffset
7517 / 4513 / 1025
Регистрация: 30.01.2014
Сообщений: 7,362
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 / 4
Регистрация: 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
7517 / 4513 / 1025
Регистрация: 30.01.2014
Сообщений: 7,362
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 / 4
Регистрация: 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
7517 / 4513 / 1025
Регистрация: 30.01.2014
Сообщений: 7,362
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 / 4
Регистрация: 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
7517 / 4513 / 1025
Регистрация: 30.01.2014
Сообщений: 7,362
30.03.2014, 00:37 #8
Lynatik001, ну так очевидно же, что в таком случае у нас aaa должен быть типа int. В общем определиться тебе нужно в том, что ты хочешь. До этих пор какой-то конкретный правильный совет, кроме как переписать класс riad сложно дать.
Сейчас же получается, что семантика твоего типа riad не формализована тобой же. Определи строгие рамки для его поведения. И тогда все встанет на свои места.
1
Lynatik001
38 / 32 / 4
Регистрация: 28.09.2012
Сообщений: 626
30.03.2014, 01:09  [ТС] #9
спасибо разобрался, уже работает как надо
Цитата Сообщение от DrOffset Посмотреть сообщение
Сейчас же получается, что семантика твоего типа riad не формализована тобой же. Определи строгие рамки для его поведения. И тогда все встанет на свои места.
Что то не понимаю, это ты о смысловом обозначении переменных? И в смысле определить строгие рамки поведения?
0
DrOffset
7517 / 4513 / 1025
Регистрация: 30.01.2014
Сообщений: 7,362
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
Привет! Вот еще темы с ответами:

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания" - C++
Создать класс Книга поля: название книги,количество страниц,год издания методы: вычислить сколько лет книге и количество дней прошедших...

Определить тип данных "Запись", имеющий поля "Фамилия", "Пол", "Зарплата" - C++
определить тип данных запись имеющий поля фамилия пол зарплата. определить массив из 10 записей. в программе ввести в массив данные и...

Структура «Преподаватель» с полями "ФИО", "стаж", "категория", "нагрузка" - C++
Функция - расчёт зарплаты по нагрузке и оплате часа для определенной категории. Категория Оплата часа Вторая 150 Первая 200 ...

по строкам.замените в слове сочетание "му" на "а" , а букву "ы" на "ца". очень нужно - C++
замените в слове сочетание &quot;му&quot; на &quot;а&quot; , а букву &quot;ы&quot; на &quot;ца&quot;. очень нужно Добавлено через 21 час 4 минуты неужели никто не знает...


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

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

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