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

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

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

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

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

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

Создать класс очередь Turn (содержащий числовое поле) и перегрузить для него операторы согласно условию - C++
Помогите пожалуйста, а то я запутался очень сильно. ;c Создать класс очередь Turn (содержит числовое поле). Перегрузить операторы: ...

Создать класс Complex и перегрузить операторы - C++
Создайте класс с именем Complex для выполнения арифметических операций с комплексными числами. Напишите программу для тестирования вашего...

Создать класс комплексных чисел, перегрузить операторы -= и *= - C++
Добрый вечер. У меня есть некоторый вопрос. Надо создать класс комплексных чисел. Перегрузить операторы -= и *=. Первый получился. Но вот...

Перегрузить операторы = и [] для hash - C++
есть оператор который возвращает значение по ключу, как правильно написать оператор = для возможности писать такое hash = "Moto...

Перегрузить операторы +=, -=, *=, /= для класса Rational - C++
дан класс Rational, который описывает рациональное число. В нем определены методы add, sub, mul и div, которые прибавляют к нему число,...

Перегрузить операторы для класса Ромб. - C++
1. Опишите класс "Ромб" class Rhombus// Класс Ромб { float x,y, d1, d2 ; public: void input_Rhombus(); };Данные класса:...

12
Vourhey
Почетный модератор
6485 / 2259 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
29.01.2014, 13:19 #2
И где вопрос? В чем проблема?
0
ruTwit
6 / 6 / 1
Регистрация: 04.10.2013
Сообщений: 92
29.01.2014, 13:22  [ТС] #3
Vourhey, Решить это нужно, у меня не выходит
0
egor2116
340 / 371 / 42
Регистрация: 20.01.2013
Сообщений: 1,127
29.01.2014, 13:49 #4
у меня не выходит
А что не выходит ?

П.С.
Откройте исходники std::string
0
Pro100Whisky
0 / 0 / 0
Регистрация: 28.02.2013
Сообщений: 35
29.01.2014, 14:07 #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;
выводит пустую строку всё равно.
0
egor2116
340 / 371 / 42
Регистрация: 20.01.2013
Сообщений: 1,127
29.01.2014, 14:11 #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);
};
0
aLarman
29.01.2014, 14:17
  #7

Не по теме:

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

0
egor2116
340 / 371 / 42
Регистрация: 20.01.2013
Сообщений: 1,127
29.01.2014, 14:22 #8
Да проглючило

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

Не по теме:

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

0
egor2116
340 / 371 / 42
Регистрация: 20.01.2013
Сообщений: 1,127
29.01.2014, 14:39 #11
не подскажешь почему при конкатенации строк выводит пустую строку,
Если вы мне покажите конкатенацию в вашем коде
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
29.01.2014, 14:41 #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 >> недоделан, что то он меня в ступор вогнал
0
Pro100Whisky
0 / 0 / 0
Регистрация: 28.02.2013
Сообщений: 35
29.01.2014, 14:43 #13
egor2116, тогда подскажи как правильно её организовать что бы сложить 2 строки
0
29.01.2014, 14:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.01.2014, 14:43
Привет! Вот еще темы с ответами:

Создать класс "Триада" и перегрузить некоторые операторы - C++
1) Создать базовый класс &quot;Триада&quot; (три числа). Определить методы: конструктор, виртуальные функции увеличения полей на 1 и вывода...

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

Создать класс "Строка" и перегрузить операторы - C++
Написать код программы на С++ Создать класс СТРОКА. Для данного класса реализовать метод вывода строки на экран, перегрузить следующие...

Как правильно перегрузить операторы для собственных классов? - C++
Операторы перегрузки не выполняются. Мне кажется, я не правильно передаю объекты класса в функцию. Прошу обратить внимание на файл ...


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

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

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