Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/40: Рейтинг темы: голосов - 40, средняя оценка - 4.95
0 / 0 / 4
Регистрация: 18.11.2013
Сообщений: 42

Перегрузка операторов. Класс String

01.06.2015, 10:18. Показов 7683. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Зравствуйте! У меня есть вопрос.

Реализовать класс String для работы со строками символов. Память под строку выделять автоматически. Перегрузить операторы <=, >= и операции ввода-вывода в поток. В функции main привести примеры реализации указанных операций.

Код написал, но при запуске вылетает. Подскажите, пожалуйста, почему, как правильно перегружать операторы и как перегрузить операции ввода-вывода?

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
#include <iostream>
#include <string.h>
 
using namespace std;
 
class String
{
 
public:
    String()
      { strcpy(str, " "); }
    String( char *s)
      { strcpy(str, s);  }
    ~String();
 
    bool operator>(String b)
    { return ( strcmp( str, b.str) >0) ? true : false;  }
 
    bool operator<( String b )
    { return ( strcmp( str, b.str) <0) ? true : false;  }
 
    bool operator>=( String b )
    { return !( str < b.str ); }
 
    bool operator<=( String b )
    { return !( str > b.str ); }
 
    friend ostream& operator<<( ostream& out,  const String& );
    friend istream& operator>>( istream& in, String& );
 
private:
    char *str;
};
 
 
String::~String()
{
    delete str;
}
 
 
ostream & operator<<( ostream &out, const String &stroka )
{
 
}
istream & operator>>( istream &in, String &stroka )
{
    in >> stroka.str;
 
    return in;
}
 
 
int main()
{
    String a = "asdas";
    String b;
    cin >> b;
 
    if (a >= b)
        cout << "a >= b";
    else if (a <= b)
        cout << "a <= b";
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.06.2015, 10:18
Ответы с готовыми решениями:

Перегрузка операторов сравнения и разницы. Класс String
Всем привет. задание написано в начале программы. Кто может помочь с исправлением -, &lt;, &gt; Мне только удалось перегрузить +, в...

Перегрузка операторов. Реализовать класс String для работы со строками символов. Перегрузить операторы «=», «+=»
Реализовать класс String для работы со строками символов. Перегрузить операторы «=», «+=» так, чтобы производилось сложение строки и...

Перегрузка операторов и string
есть класс имитирующий стек, все методы проверены и работают правильно! Кроме части касающейся итераторов #include...

5
36 / 36 / 27
Регистрация: 05.11.2013
Сообщений: 149
01.06.2015, 10:48
Я бы добавил в категорию private переменную которая будет отвечать за размер строки, так как в конструкторе надо выделять память при помощи оператора new(что бы в деструкторе можно было использовать оператор delete) и после выделения памяти копировать строку при помощи функции strcpy. Ну и еще, не помешало бы перегрузить оператор= и конструктор копирования.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//конструктор с параметром
String::String(const char *s)
{
    length = strlen(s);//переменная отвечающая за длину строки
    str = new char[length+1];
    strcpy(str,s);
}
//Деструктор
String::~String()
{
    delete [] str;
}
 
//Оператор вывода
ostream &operator<<(ostream &os, const String &s)
{
    os << s.str;
    return os;
}
0
 Аватар для Nosey
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
01.06.2015, 10:55
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
class String
{
 
public:
    String() :
            str(nullptr)
    {
    }
 
    String(const char *s) :
            str(new char[strlen(s)+1])
    {
        strcpy(str, s);
    }
 
    String(const String& s) :
            str(new char[strlen(s.str)+1])
    {
        strcpy(str, s.str);
    }
 
    ~String()
    {
        delete[] str;
    }
 
    bool operator>(const String& b) const
    {
        return (strcmp(str, b.str) > 0) ? true : false;
    }
 
    bool operator<(const String& b) const
    {
        return (strcmp(str, b.str) < 0) ? true : false;
    }
 
    bool operator>=(const String& b) const
    {
        return !operator <(b);
    }
 
    bool operator<=(const String& b) const
    {
        return !operator >(b);
    }
 
    friend ostream& operator<<(ostream& out, const String&);
    friend istream& operator>>(istream& in, String&);
 
private:
    char *str;
};
 
ostream& operator<<(ostream &out, const String &stroka)
{
    out << stroka.str;
    return out;
}
 
istream& operator>>(istream &in, String &stroka)
{
    // я не хочу заниматься выделением памяти:)
    std::string oops;
    in >> oops;
    delete[] stroka.str;
    stroka.str = new char[oops.size()+1];
    strcpy(stroka.str, oops.c_str());
    return in;
}
 
int main()
{
    String a = "asdas";
    String b;
    cin >> b;
 
    if (a >= b)
        cout << "a >= b";
    else if (a <= b)
        cout << "a <= b";
    return 0;
}
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
01.06.2015, 11:45
Nosey, при первом же копирующем присваивании всё поедет.
0
 Аватар для Nosey
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
01.06.2015, 12:09
Цитата Сообщение от Tulosba Посмотреть сообщение
Nosey, при первом же копирующем присваивании всё поедет.
А я другого и не обещал.
Это лишь рабочая версия ТС.

Добавлено через 3 минуты
И собственно Hrollo написал про присваивание и другие хорошие вещи.
0
0 / 0 / 4
Регистрация: 18.11.2013
Сообщений: 42
01.06.2015, 14:27  [ТС]
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.06.2015, 14:27
Помогаю со студенческими работами здесь

Перегрузка операторов класса String
Срочно нужна помощь. Реализовать класс String для работы со строками символов. Перегрузить операторы «=», «+=» так, чтобы производилось...

Перегрузка операторов класса String
Помогите сделать: Создать класс строка Stroka. Перегрузить операторы: 1) ! как унарный метод класса, проверяющий наличие символов в...

Перегрузка операторов и абстрактный класс
Имеется два класса (DecString и SymbString), наследуемых от абстрактного AString. Можно ли как-нибудь перегрузить операции - и =, чтобы...

Перегрузка операторов. Класс VECTOR
Задание 1: Разработка класса. Разработайте класс VECTOR. Элемент класса: координаты вектора. Методы: конструктор без...

Класс многочлен, перегрузка операторов
Здравствуйте. Есть класс многочлен степени n от одной переменной x, задаваемый массивом своих коэффициентов. Для класса перегрузить...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru