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

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

Войти
Регистрация
Восстановить пароль
 
ruTwit
6 / 6 / 1
Регистрация: 04.10.2013
Сообщений: 92
#1

Описать класс my_str и перегрузить для него операторы. - C++

29.01.2014, 13:16. Просмотров 459. Ответов 12
Метки нет (Все метки)

Описать класс my_str, содержащий длину строки и указатель на ее первый символ.
Определить для класса необходимые конструктор(ы), деструктор, а также операции
а) присваивания ( = ), осуществляющее посимвольное копирование строк;
б) сложения (+) – результатом является конкатенация исходных строк;
в) присваивание со сложением +=, к первой строке-параметру добавляется в конец вторая
строка;
г) приведения к типу char*;
д) ввод ( » ) строки, который осуществляется до символа '\n', все введенные символы-
пробелы пропускаются (не добавляются в строку).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.01.2014, 13:16     Описать класс my_str и перегрузить для него операторы.
Посмотрите здесь:

C++ Перегрузить операторы = и [] для hash
Описать класс одномерный массив (вектор) целых чисел. Перегрузить следующую операцию: > уменьшить элементы вектора на заданное значение C++
C++ Как перегрузить операторы >> и << для структуры чтоб работалы итераторы?
Создать класс "Триада" и перегрузить некоторые операторы C++
C++ Создать класс комплексных чисел, перегрузить операторы -= и *=
Перегрузить операторы для класса Ромб. C++
C++ Перегрузить операторы +=, -=, *=, /= для класса Rational
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6471 / 2246 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
29.01.2014, 13:19     Описать класс my_str и перегрузить для него операторы. #2
И где вопрос? В чем проблема?
ruTwit
6 / 6 / 1
Регистрация: 04.10.2013
Сообщений: 92
29.01.2014, 13:22  [ТС]     Описать класс my_str и перегрузить для него операторы. #3
Vourhey, Решить это нужно, у меня не выходит
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,113
29.01.2014, 13:49     Описать класс my_str и перегрузить для него операторы. #4
у меня не выходит
А что не выходит ?

П.С.
Откройте исходники std::string
Pro100Whisky
0 / 0 / 0
Регистрация: 28.02.2013
Сообщений: 32
29.01.2014, 14:07     Описать класс my_str и перегрузить для него операторы. #5
Примерно делал вот так, но не знаю почему выводит в конкатенации только пустую строку. а а где присваивания просит вернуть значение, если ставить return *this; все равно ошибка.

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
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
 
class my_str
{
  public:
    string str,str1;
    int length;
    void Show()
    {
    cout<<str;
    };
    my_str::my_str(){};
    my_str::my_str(int le, string g)
    {
        length=le;
        str1=g;
    }
    /*my_str operator= (const my_str&c)
    {
        for(int i=0; i<c.length;i++)
        {
            str[i]=c.str1[i];
            return *this;
        }
    }    */
    my_str operator+(const my_str&R)
    {
    my_str result;
    result.str=str+R.str;
    return result;
    }
    
    my_str::~my_str(){}
    
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(0,"Rus");
        my_str stra(6,"Hello"), strb(5,"world"),strc=stra+strb; stra=strb;
        strb.Show();
        cout<<endl;
        strc.Show();
        cout<<endl;
    return 0;
Добавлено через 8 минут
ошибся в main
написал вот это:
C++
1
my_str stra(5,"Макро"), strb(5,"мир"),strc=stra+strb;
выводит пустую строку всё равно.
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,113
29.01.2014, 14:11     Описать класс my_str и перегрузить для него операторы. #6
Решить это нужно
Могу предложить интерфейс вашего класса
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class MyString
{
  private:
          size_t SIZE;
          char * str;
  public:
         MyString(char * _str = NULL);
         MyString(const MyString & myStr);
         ~MyString();
         
         size_t size()const{ return SIZE; }
         size_t lenght()const{ return SIZE; }
         char * c_str(){ return str; }
         MyString & operator = (const MyString & myStr);
         MyString & operator + (const MyString & myStr);
         MyString & operator += (MyString & left, const MyString & right);
         friend std::ostream operator << (std::ostream out, const MyString & myStr);
};
aLarman
29.01.2014, 14:17
  #7

Не по теме:

Цитата Сообщение от ruTwit Посмотреть сообщение
ввод ( » ) строки, который осуществляется до символа '\n'
Цитата Сообщение от egor2116 Посмотреть сообщение
C++
1
friend std::ostream operator << (std::ostream out, const MyString & myStr);
что то тут не так

egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,113
29.01.2014, 14:22     Описать класс my_str и перегрузить для него операторы. #8
Да проглючило

Добавлено через 3 минуты
C++
1
2
 friend std::ostream & operator << (std::ostream & out, const MyString & myStr);
friend std::istream & operator >> (std::istream & in, MyString & myStr);
Pro100Whisky
0 / 0 / 0
Регистрация: 28.02.2013
Сообщений: 32
29.01.2014, 14:25     Описать класс my_str и перегрузить для него операторы. #9
egor2116, не подскажешь почему при конкатенации строк выводит пустую строку, а не результат: макромир
aLarman
29.01.2014, 14:31
  #10

Не по теме:

Цитата Сообщение от egor2116 Посмотреть сообщение
C++
1
MyString & operator += (MyString & left, const MyString & right);
не многовато аргументов у +=

egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,113
29.01.2014, 14:39     Описать класс my_str и перегрузить для него операторы. #11
не подскажешь почему при конкатенации строк выводит пустую строку,
Если вы мне покажите конкатенацию в вашем коде
aLarman
640 / 561 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
29.01.2014, 14:41     Описать класс my_str и перегрузить для него операторы. #12
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include <iostream>
using namespace std;
class my_str
{
public:
    my_str():_str(NULL), _length(0)
    {
        _str = new char[64];
    }
    my_str(char * str):_str(NULL), _length(0)
    {
        _length = strlen(str);
        _str = new char[_length+1]; 
        for(int i = 0; i < _length+1;i++)
        {
            _str[i] = str[i];
        }
    }
    my_str(const my_str & r_my_str)
    {
        _length = r_my_str._length;
        _str = new char[_length+1];
        for(int i = 0; i < _length+1;i++)
        {
            _str[i] = r_my_str._str[i];
        }
    }
    ~my_str()
    {
        if(!_str)
        {
            delete [] _str;
        }
    }
    my_str operator = (const my_str & r_my_str)
    {
        if(this == &r_my_str)
            return *this;
        _length = r_my_str._length;
        if(!_str)
        {
            delete[] _str;
            _str = NULL;
        }
        _str = new char[_length+1];
        for(int i = 0; i < _length+1;i++)
        {
            _str[i] = r_my_str._str[i];
        }
        return *this;
    }
    my_str operator+(const my_str & r_my_str)
    {
        my_str tmp;
        tmp._length = _length+r_my_str._length;
        if(tmp._str)
        {
            delete[] tmp._str;
            tmp._str = NULL;
        }
        tmp._str = new char[tmp._length+1];
        for(int i = 0; i < _length;i++)
        {
            tmp._str[i] = _str[i];
        }
        for(int i = _length; i < tmp._length+1;i++)
        {
            tmp._str[i] = r_my_str._str[i-_length];
        }
        return tmp;
    }
    const my_str& operator+=(const my_str & r_my_str)
    {
        char * tmp = new char[_length];
        unsigned int tmp_length = _length;
        for(int i = 0; i < _length;i++)
        {
            tmp[i] = _str[i];
        }
        if(_str)
        {
            delete[] _str;
            _str = NULL;
        }
        _length += r_my_str._length;
        _str = new char[_length+1];
        for(int i = 0; i < tmp_length;i++)
        {
            _str[i] = tmp[i];
        }
        for(int i = tmp_length; i < _length+1;i++)
        {
            _str[i] = r_my_str._str[i-tmp_length];
        }
        delete[]tmp;
        return *this;
    }
    operator char*()
    {
        return _str;
    }
    friend istream& operator>>(istream & is, my_str & r_my_str)
    {
        if(!r_my_str._str)
        {
            delete[] r_my_str._str;
        }
 
    }
    unsigned int GetLength() const
    {
        return _length;
    }
private:
    char * _str;
    unsigned int _length;
};
int main()
{
    char str[] = "1234";
    my_str MyStr1;
    my_str MyStr2;
    my_str MyStr3(str);
 
    MyStr1 = MyStr3;
    my_str MyStr4;
    MyStr4 = MyStr1+MyStr3;
    MyStr4+=MyStr3;
    char * a = (char*)MyStr4;
    system("pause");
    return 0;
}
operator >> недоделан, что то он меня в ступор вогнал
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.01.2014, 14:43     Описать класс my_str и перегрузить для него операторы.
Еще ссылки по теме:

Как перегрузить операторы для шаблонного класса? C++
Создать класс очередь Turn (содержащий числовое поле) и перегрузить для него операторы согласно условию C++
Создать класс "Строка" и перегрузить операторы C++
Создать класс Complex и перегрузить операторы C++
C++ Как правильно перегрузить операторы для собственных классов?

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

Или воспользуйтесь поиском по форуму:
Pro100Whisky
0 / 0 / 0
Регистрация: 28.02.2013
Сообщений: 32
29.01.2014, 14:43     Описать класс my_str и перегрузить для него операторы. #13
egor2116, тогда подскажи как правильно её организовать что бы сложить 2 строки
Yandex
Объявления
29.01.2014, 14:43     Описать класс my_str и перегрузить для него операторы.
Ответ Создать тему
Опции темы

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