Форумчане, помогите пожалуйста с задачей. Никак не пойму как перегрузить часть операторов. Вот условие задачи :
Создать динамический класс для работы со строками . Максимальная длина последовательности - 254. Первый байт должен содержать информацию о фактическом количестве элементов массива. Осуществить перегрузки операций:
"=" - Присвоение ,
"+" - Конкатенация (соединение ) строк ,
" < =" - Отношение "меньше или равно" ,
" > =" - Отношение "больше или равно" ,
" ==" - Отношение "равно" ,
" ! =" - Отношение " не равно" .
" < =" - Отношение включения ( проверяется, есть множество, предоставлена левым операндом , подмножеством множества , предоставленной правым ) ,
" ==" - Эквивалентность множеств ,
" ! =" - Неэквивалентность множеств ,
" <<" - Принадлежность (проверяется , принадлежит значение , предоставленное левым операндом , к множеству , предоставленной правым операндом ) .
*У меня не получается эта часть(не пойму как реализовать):*
" < =" - Отношение включения ( проверяется, есть множество, предоставлена левым операндом , подмножеством множества , предоставленной правым ) ,
" ==" - Эквивалентность множеств ,
" ! =" - Неэквивалентность множеств ,
" <<" - Принадлежность (проверяется , принадлежит значение , предоставленное левым операндом , к множеству , предоставленной правым операндом ) .
Вот то, что у меня получилось:
#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;}
}
}
Я не пойму как перегрузить остальные операторы.... Помогите пожалуйста, буду очень благодарен.