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

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

Войти
Регистрация
Восстановить пароль
 
Timama
10 / 10 / 5
Регистрация: 30.03.2016
Сообщений: 160
#1

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

19.08.2016, 21:59. Просмотров 202. Ответов 13
Метки нет (Все метки)

доброго времени суток.
не как не получаеться перегрузить операторы класса.
в общем, есть массив типа MString (другой класс) в котором есть массив char.
вот собственно и его код( записи массива MString)
C++
1
2
3
4
5
6
7
istream& operator >> (istream& input, MString &obj)
{
    cout << "Enter a word: ";
    input >> obj.data;
    obj.length = obj.mystrlen(obj.data);
    return input;
}
его header
Кликните здесь для просмотра всего текста
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
//MString.h
#ifndef MSTRING_H
#define MSTRING_H
 
#include <assert.h>//for check a dinamic memory
#include<iostream>//input output
 
using namespace std;
 
class MString{
private:
    char* data;//string
    int length;//long of string
public:
    MString();//def c'tor
    MString(char* str);//c'tor
    MString(int len);//c'tor
    MString(const MString& obj);//copy c'tor
    ~MString();//d'ctor
    char* getData();//get data
    void SetString(char* string);//set data
    int getLenght();//get lenght
    void setLenght(int len);//set lenght
    int mystrlen();//long of string
    int mystrlen(const char* string);//long of string
    void Printer();//screening a string
    char* mystrcpy(char* data, const char *string,int len);//copy two strings
    void operator + (const char letter);//add letter to the string
    void operator - (const char letter);//remove letter from the string
    bool operator == (const MString& b);//check if string are equel
    bool operator != (const MString& b);//check if string are not equel
    bool operator >(const MString& b);//check if a letter of this object are bigger than letters of b object
    bool operator <=(const MString& b);//check if this obj is smaller or equel to b obj
    bool operator <(const MString& b);//check if letter of this obj are smaller than letters of b obj
    bool operator >=(const MString& b);//check if this obj are bigger or equel to b obj
    void operator =(const MString& b);//this obj = b obj
    char operator [] (const int index);//returnt index
    char* operator+(const MString& b);//add one string to another
    MString& operator +=(const char letter);//add a letter to the end of the string
    char* operator()(int, int);//return a new string from the index until here lenght
    char* operator()(int);//return new string from the index 0 until here lenght
    bool operator !();//check if string are clear
    MString& operator ++();//add a first letter to the end of the string
    MString& operator++(int);//end a end letter to the end of the string
    friend ostream& operator << (ostream& out, const MString& obj);//out put the object
    friend istream& operator >> (istream& in, MString& obj); //in out the object
    void AllSmall();//convert all letter to big
    void AllBig();//convert all letter to small
};
#endif MSTRING H


Класс Story содержит массив типа MString и должен записать в него массивы типа char (каждый индекс массива MString это слово, тоесть во время записи после того как ввод подойдет SPACE надо переходить на следующий индекс.
вот собственно набрости перегрузки в Story:
C++
1
2
3
4
5
6
7
8
9
10
istream& operator >> (istream& input, Story &obj){
    int i;
    cout << "Enter a sentence:\n " << endl;
    for (i = 0; i < obj.lenght; i++){
        while (obj.TheStory[i] != SPACE){
            input >> obj.TheStory[i];
        }
    }
    return input;
}
его header
Кликните здесь для просмотра всего текста
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
//Story.h
#ifndef STORY_H
#define STORY_H
#include "MString.h"
#include <iostream>
#include <assert.h>
 
class Story{
private:
    MString* TheStory;
    MString NameStory;
    int lenght;
    int numofstories;
public:
    Story();
    Story(char* str);
    Story(const Story& b);
    ~Story();
    MString longword();
    int lenlongword();
    Story& AllBig();
    Story& AllSmall();
    void storyname();
    Story& addword(char* str);
    int getnumofstories();
    Story& operator=(const Story& b);
    bool operator ==(const Story& b);
    bool operator >(const Story& b);
    bool operator <(const Story& b);
    friend ostream& operator << (ostream& out, const Story& obj);//out put the object
    friend istream& operator >> (istream& in, Story& obj); //in out the object
    MString operator [](int);
    friend int setNumOfStories(int num);
};
#endif STORY H
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.08.2016, 21:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка операторов >> (C++):

Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this - C++
Добрый день . Помогите понять принцип работы перегрузки операторов. объясните пожалуйста в зависимости от чего зависит агрумент при...

перегрузка операторов - C++
#include &lt;iostream&gt; #include &lt;Windows.h&gt; using namespace std; class CBox { private: double Width; double Height; ...

Перегрузка операторов - C++
Доброго времени суток! Столкнулся с такой проблемой, перегрузка операторов. Имею работающий код, но не смог сделать по своему заданию. ...

перегрузка операторов - C++
здравствуйте. недавно разбираю с С++, и как у всех начинающих возникла очередная непонятка, которую неудаетс победить самостоятельно. ...

Перегрузка операторов - C++
В программе нужно сделать перегрузку оператора умножения, не могу понять что и как делать... Помогите разобраться :) #include...

Перегрузка операторов - C++
Мне нужно определить тип name_and_adress. Потом перегрузить для него операторы &lt;&lt; и &gt;&gt; и скопировать поток объектов name_and_adress. У...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Bretbas
198 / 57 / 8
Регистрация: 05.08.2013
Сообщений: 880
Завершенные тесты: 1
19.08.2016, 23:35 #2
А где где резервирование памяти для data происходит? И не используйте char*. Вместо него лучше std::string и это не мой совет, а многих профессионалов c++
0
Timama
10 / 10 / 5
Регистрация: 30.03.2016
Сообщений: 160
19.08.2016, 23:42  [ТС] #3
Если бы я мог, то пользовался бы string( в общем MString и есть string)
резервирование памяти проходит в Констракторе MString.
обьясню по легче, надо записать слово в каждый индекс, то есть, допустим у нас есть предложение. которое мы в водим через перезагруженный cin>>
"Good Morning Bob Marley"
то в Массив будет выглядеть так
|GOOD\0||Morning\0||Bob\0||Marley\0||
0
Stitch Igorek
45 / 45 / 18
Регистрация: 02.04.2016
Сообщений: 308
Завершенные тесты: 1
19.08.2016, 23:59 #4
А в чем ошибка? компилятор что то пишет, или программа работает не так как ожидалось?
у меня подозрение на
Цитата Сообщение от Timama Посмотреть сообщение
C++
1
return input;
если я правильно помню, то поток должен возвращать сам себя, то есть
C++
1
return this;
0
Timama
10 / 10 / 5
Регистрация: 30.03.2016
Сообщений: 160
20.08.2016, 00:00  [ТС] #5
программы работает, просто не имею понятия как сделть эту муть.
0
Stitch Igorek
45 / 45 / 18
Регистрация: 02.04.2016
Сообщений: 308
Завершенные тесты: 1
20.08.2016, 00:15 #6
Цитата Сообщение от Timama Посмотреть сообщение
программы работает, просто не имею понятия как сделть эту муть.
C++
1
2
3
4
5
6
7
8
9
10
istream& operator >> (istream& input, Story &obj){
* * int i;
* * cout << "Enter a sentence:\n " << endl;
* * for (i = 0; i < obj.lenght; i++){   // где инициализация obj.lenght?
* * * * while (obj.TheStory[i] != SPACE){   // как можно сравнить строку с одним символом/клавишей?
* * * * * * input >> obj.TheStory[i];   // сколько памяти выделено под obj.TheStory[]?
* * * * }
* * }
* * return input;
}
0
Timama
10 / 10 / 5
Регистрация: 30.03.2016
Сообщений: 160
20.08.2016, 00:17  [ТС] #7
Цитата Сообщение от Stitch Igorek Посмотреть сообщение
где инициализация obj.lenght?
в классе Story
Цитата Сообщение от Stitch Igorek Посмотреть сообщение
сколько памяти выделено под obj.TheStory[]?
зависит от в водимого слова.
0
Stitch Igorek
45 / 45 / 18
Регистрация: 02.04.2016
Сообщений: 308
Завершенные тесты: 1
20.08.2016, 00:21 #8
Цитата Сообщение от Timama Посмотреть сообщение
в классе Story
определение то есть(наверно), а вот конкретно поставь брекпоинт на этой строке, и посмотри, какая цифра записана в данной переменной
0
Timama
10 / 10 / 5
Регистрация: 30.03.2016
Сообщений: 160
20.08.2016, 11:18  [ТС] #9
я думаю мне надо сделать запись с лупом что то типо input>>TheStory[i] но как то надо посчитать перед этим все слова, что бы задать конец лупа.
0
Stitch Igorek
45 / 45 / 18
Регистрация: 02.04.2016
Сообщений: 308
Завершенные тесты: 1
20.08.2016, 12:09 #10
Цитата Сообщение от Timama Посмотреть сообщение
но как то надо посчитать перед этим все слова, что бы задать конец лупа.
ага, как посчитать еще не введенные слова? сделай через список - ввел слово, добавил в список, поставил *next на следующее слово, если будет точка(или как там задумано определить конец предложения) поставил *next = NULL.
0
Timama
10 / 10 / 5
Регистрация: 30.03.2016
Сообщений: 160
20.08.2016, 12:27  [ТС] #11
да по проблемма в том что ему надо выделить память, а сделать его статическим не льзя, ибо не знаешь сколько слов в ведеться. как бы конец Истории должен быть после нажатия клавиши Enter
0
Stitch Igorek
45 / 45 / 18
Регистрация: 02.04.2016
Сообщений: 308
Завершенные тесты: 1
20.08.2016, 13:18 #12
Цитата Сообщение от Timama Посмотреть сообщение
да по проблемма в том что ему надо выделить память
так со списком то это как раз не проблема - выделил память под одно слово, ввел, на следующее слово выделяется еще память и так пока не надоест.
0
Timama
10 / 10 / 5
Регистрация: 30.03.2016
Сообщений: 160
20.08.2016, 17:11  [ТС] #13
Цитата Сообщение от Stitch Igorek Посмотреть сообщение
так со списком то это как раз не проблема
можешь дать пример кода?
0
obivan
Падаван С++
403 / 223 / 58
Регистрация: 11.11.2014
Сообщений: 773
Завершенные тесты: 2
20.08.2016, 17:15 #14
Timama, Большая коллекция решенных задач
там списки и тд. на любой вкус
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2016, 17:15
Привет! Вот еще темы с ответами:

перегрузка операторов - C++
Имеется такая программа: class reversion { vector&lt;int&gt; mass1; vector&lt;int&gt; mass2; vector&lt;int&gt; rev1; vector&lt;int&gt; rev2; ...

Перегрузка операторов -> <- - C++
Здравствуйте в столь позднее время.. Какова особеность перегрузки операторов -&gt; и . ? Что возвращают ? Если можно ссылки на...

Перегрузка операторов - C++
Доброго времени суток. на завтра надо сделать работу, а я не могу понять как использовать перегрузку операторов. помогите пожалуйста...

Перегрузка операторов - C++
Доброго времени суток. Начал изучать основы ООП, дошел до перегрузки операторов. В программе возникает ошибка при проверке любого...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.08.2016, 17:15
Ответ Создать тему
Опции темы

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