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

Создать динамический класс для работы со строками. Перегрузка строкового класса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вывести начальные индексы всех непрерывных последовательностей неотрицательных чисел массива http://www.cyberforum.ru/cpp-beginners/thread1156738.html
Вывести начальные индексы всех непрерывных последовательностей неотрицательных чисел, длина которых больше 5 Диапазон значений: -100 ; 100.
C++ Классы "Пара чисел" и "Прямоугольный треугольник" Необходимо реализовать: Базовый класс: ПАРА_ЧИСЕЛ (PAIR) Первое_число (first) - int Второе_число (second) – int Определить методы изменения полей и вычисления произведения чисел. Создать производный класс ПРЯМОУГОЛЬНЫЙ_ТРЕУГОЛЬНИК (RIGHTANGLED), с полями-катетами. Определить метод вычисления гипотенузы #include <iostream> http://www.cyberforum.ru/cpp-beginners/thread1156725.html
C++ Найти интеграл методом прямоугольников
использовать метод прямоугольников. Для построения прямоугольника использовать середину отрезка. y= 0, y = 5x − x2 +14. никак не разобрался как туда интегралы вводить или я что не так сделал... подскажите. заранее спасибо.
C++ Продемонстрировать преимущества применения фактических и формальных параметров функций
разработать набор подпрограмм в которых продемонстрировать преимущества применения фактических и формальных параметров функций при решении задач различных направлений. Предметную область подобрать самостоятельно...........делать в С++
C++ Сформировать список L, включив в него положительные элементы списка L1 и отрицательные элементы списка L2 http://www.cyberforum.ru/cpp-beginners/thread1156719.html
Сформировать список L, включив в него положительные элементы списка L1 и отрицательные элементы списка L2. Список L отсортировать в порядке возрастания абсолютных значений элементов. В программе использовать указатели. Список list использовать нельзя. помогите пожалуйста.
C++ Заданное натуральное число M представить в виде суммы квадратов двух натуральных чисел Заданное натуральное число M представить в виде суммы квадратов двух натуральных чисел . Написать и протестировать функцию решения этой задачи. Помогите пожалуйста Добавлено через 37 секунд очень срочно надо подробнее

Показать сообщение отдельно
BattleManLS
0 / 0 / 0
Регистрация: 25.11.2013
Сообщений: 31

Создать динамический класс для работы со строками. Перегрузка строкового класса - C++

25.04.2014, 00:28. Просмотров 576. Ответов 2
Метки (Все метки)

Форумчане, помогите пожалуйста с задачей. Никак не пойму как перегрузить часть операторов. Вот условие задачи :
Кликните здесь для просмотра всего текста

Создать динамический класс для работы со строками . Максимальная длина последовательности - 254. Первый байт должен содержать информацию о фактическом количестве элементов массива. Осуществить перегрузки операций:
"=" - Присвоение ,
"+" - Конкатенация (соединение ) строк ,
" < =" - Отношение "меньше или равно" ,
" > =" - Отношение "больше или равно" ,
" ==" - Отношение "равно" ,
" ! =" - Отношение " не равно" .
" < =" - Отношение включения ( проверяется, есть множество, предоставлена ​​левым операндом , подмножеством множества , предоставленной правым ) ,
" ==" - Эквивалентность множеств ,
" ! =" - Неэквивалентность множеств ,
" <<" - Принадлежность (проверяется , принадлежит значение , предоставленное левым операндом , к множеству , предоставленной правым операндом ) .


Вот то что у меня получилось:
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
133
134
135
136
137
138
139
140
141
142
143
144
#include <iostream>
#include <string.h>
#include <cstdlib>
#include <iomanip>
#include <cstdlib>
#include <fstream>
using namespace std;
 
class String
{
public:
       char *str;
     String();
 
     void operator= (String &obj2);
    void operator+ (String &obj2);
     void operator<= (String &obj1);
      void operator>= (String &obj2);
       void operator== (String &obj2);
        void operator!= (String &obj2);
 
 //Консольный Ввод и Вывод
     friend ostream &operator<<(ostream &stream, String obj);
     friend istream &operator>>(istream &stream, String obj);
};
//Конструктор
String::String()
{
    str=new char[255];
}
 
//Присвоение
void String::operator=(String &obj2){
       strcpy(str,obj2.str);
}
 
void String::operator+(String &obj2){
       strcat(str,obj2.str);
}0
 
 
void String::operator<=(String &obj1){
      if (str<=obj1.str){
 
        cout<<"Да 1 <= 2"<<endl;
      }
      else
        cout<<"Лож"<<endl;
}
 
void String::operator>=(String &obj2){
       strcpy(str,obj2.str);
}
 
void String::operator==(String &obj2){
      if( strcmp(str,obj2.str)){
        cout<<"Не равны!"<<endl;
        cout<<str;
        cout<<obj2.str;
      }
      else
        cout<<"Равны!"<<endl;
}
 
void String::operator!=(String &obj2){
       strcmp(str,obj2.str);
        if( !strcmp(str,obj2.str)){
        cout<<"Равны!"<<endl;
      }
      else
        cout<<"Не равны!"<<endl;
}
 
//Описание консольного вывода
ostream &operator<<(ostream &stream, String obj)
{
    stream<<obj.str;
    return stream;
}
 
//Описание консольного ввода
istream &operator>>(istream &stream, String obj)
{
    stream>>obj.str;
    return stream;
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    String obj1, obj2;
    int deistv;
    cout<<"Введите строку"<<"\n"<<"-> ";
    cin>>obj1;
    cout<<"\nВаша строка"<<"\n->";
    cout<<obj1;
    cout<<"Введите вторую строку"<<"\n"<<"-> ";
    cin>>obj2;
    cout<<"\nВаша строка"<<"\n->";
    cout<<obj2;
 
    while (1){
    cout << "\n"<<"Выберите действие (перегрузку):\n";
                cout << "1. Демонстрация присвоения"<<endl;
                cout << "2. Сложить (+)"<<endl;
                cout << "3. Сравнить (==)"<<endl;
                cout << "4. Сравнить (!=)"<<endl;
                cout << "5. <="<<endl;
                cout << "7. Выход из программы"<<endl;
                cout << "7. Выход из программы"<<endl;
    cout<<"->";
    cin>>deistv;
    if (deistv==1){
        obj2=obj1;
        cout<<"Второй объект содержит строку: ";
        cout<<obj2;
                  }
 
if (deistv==2){
        obj2+obj1;
        cout<<"Второй объект содержит строку: ";
        cout<<obj2;
                  }
 
        if (deistv==3){
        obj2==obj1; }
 
 
        if (deistv==4){
        obj2!=obj1;
 
                  }
 
 
                  if (deistv==5){
        obj1<=obj2;
 
                  }
 
    if (deistv==7){
         system("PAUSE");
        return 0;}
}
}
Я не пойму как перегрузить остальные операторы....

Добавлено через 1 час 3 минуты
Я немного продвинулся дальше. У меня не получается эта часть(не пойму как реализовать):

" < =" - Отношение включения ( проверяется, есть множество, предоставлена ​​левым операндом , подмножеством множества , предоставленной правым ) ,
" ==" - Эквивалентность множеств ,
" ! =" - Неэквивалентность множеств ,
" <<" - Принадлежность (проверяется , принадлежит значение , предоставленное левым операндом , к множеству , предоставленной правым операндом ) .

Мой код :
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#include <iostream>
#include <string.h>
#include <cstdlib>
#include <iomanip>
#include <cstdlib>
#include <fstream>
using namespace std;
 
 
 
class String
{
public:
       char *str;
     String();
 
     void operator= (String &obj2);
    void operator+ (String &obj2);
     void operator<= (String &obj2);
      void operator>= (String &obj2);
       void operator== (String &obj2);
        void operator!= (String &obj2);
 
     //Консольный Ввод и Вывод
     friend ostream &operator<<(ostream &stream, String obj);
     friend istream &operator>>(istream &stream, String obj);
 
 
};
//Конструктор
String::String()
{
    str=new char[255];
}
 
//Присвоение
void String::operator=(String &obj2){
       strcpy(str,obj2.str);
}
 
void String::operator+(String &obj2){
       strcat(str,obj2.str);
}
 
 
void String::operator<=(String &obj2){
    int t = atoi(str);
    int k = atoi(obj2.str);
      if (t<=k){
        cout<<"Да 1 <= 2"<<endl;
      }
      else
        cout<<"Лож"<<endl;
}
 
void String::operator>=(String &obj2){
      int t = atoi(str);
    int k = atoi(obj2.str);
      if (t>=k){
        cout<<"Да 1 >= 2"<<endl;
      }
      else
        cout<<"Лож"<<endl;
}
 
void String::operator==(String &obj2){
      if( strcmp(str,obj2.str)){
        cout<<"Не равны!"<<endl;
        cout<<str;
        cout<<obj2.str;
      }
      else
        cout<<"Равны!"<<endl;
}
 
void String::operator!=(String &obj2){
       strcmp(str,obj2.str);
        if( !strcmp(str,obj2.str)){
        cout<<"Равны!"<<endl;
      }
      else
        cout<<"Не равны!"<<endl;
}
 
 
 
 
//Описание консольного вывода
ostream &operator<<(ostream &stream, String obj)
{
    stream<<obj.str;
    return stream;
}
 
//Описание консольного ввода
istream &operator>>(istream &stream, String obj)
{
    stream>>obj.str;
    return stream;
}
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    String obj1, obj2;
    int deistv;
    cout<<"Введите строку"<<"\n"<<"-> ";
    cin>>obj1;
    cout<<"\nВаша строка"<<"\n->";
    cout<<obj1;
    cout<<"Введите вторую строку"<<"\n"<<"-> ";
    cin>>obj2;
    cout<<"\nВаша строка"<<"\n->";
    cout<<obj2;
 
    while (1){
    cout << "\n"<<"Выберите действие (перегрузку):\n";
                cout << "1. Демонстрация присвоения"<<endl;
                cout << "2. Сложить (+)"<<endl;
                cout << "3. Сравнить (==)"<<endl;
                cout << "4. Сравнить (!=)"<<endl;
                cout << "5. <="<<endl;
                 cout << "6. >="<<endl;
                cout << "7. Выход из программы"<<endl;
                cout << "7. Выход из программы"<<endl;
    cout<<"->";
    cin>>deistv;
    if (deistv==1){
        obj2=obj1;
        cout<<"Второй объект содержит строку: ";
        cout<<obj2;
                  }
 
if (deistv==2){
        obj2+obj1;
        cout<<"Второй объект содержит строку: ";
        cout<<obj2;
                  }
 
        if (deistv==3){
        obj2==obj1; }
 
 
        if (deistv==4){
        obj2!=obj1;
 
                  }
 
 
                  if (deistv==5){
        obj1<=obj2;
 
                  }
 
                    if (deistv==6){
        obj1>=obj2;
 
                  }
 
    if (deistv==7){
         system("PAUSE");
        return 0;}
}
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru