logo search
inf_otvety_24-40

Второй пример

При создании ваших собственных типов данных с помощью классов наиболее общей операцией будет проверка, являются ли два объекта одинаковыми. Используя перегрузку, ваши программы могут перегрузить операторы равенства (==), неравенства (!=) или другие операторы сравнения. Следующая программа COMP_STR.CPP добавляет новый оператор в класс string, который проверяет, равны ли два объекта string.Используя перегрузку операторов, ваши программы могут проверять, содержат ли строковые объекты одинаковые строки, как показано ниже:

if (some_string == another_string)

Ниже приведена реализация программы COMP_STR.CPP:

#include <iostream.h>

#include <string.h>

class string

{  public:     string(char *); // конструктор     char * operator +(char *);     char * operator -(char);     int operator ==(string);     void show_string(void);  private:     char data[256];  };

string::string(char *str)

{     strcpy(data, str);  }

char * string::operator +(char *str)

{     return(strcat(data, str));  }

char * string::operator -(char letter)

{     char temp[256];     int i, j;     for (i = 0, j = 0; data[i]; i++) if (data[i] 1= letter) temp[j++] = data[i];     temp[j] = NULL;     return(strcpy(data, temp));  }

int string::operator ==(string str)

{     int i;     for (i = 0; data[i] == str.data[i]; i++)     if ((data[i] == NULL) && (str.data[i] == NULL)) return(1); // Равно    return (0); //He равно  }

void string::show_string(void)

{     cout << data << endl;  }

void main(void)

{     string title( "Учимся программировать на C++");     string lesson("Перегрузка операторов");     string str( "Учимся программировать на C++");     if (title == lesson) cout << "title и lesson равны" << endl;     if (str == lesson) cout << "str и lesson равны" << endl;     if (title == str) cout << "title и str равны" << endl;  }

Как видите, перегружая операторы подобным образом, вы упрощаете понимание ваших программ.