ob2 = ob1(10, 11, 12); // вызов функции operator()
cout << "ob1: ";
ob1.show();
cout << "ob2: ";
ob2.show();
return 0;
}
Эта программа генерирует такие результаты.
ob1: 1, 2, 3
ob2: 11, 13, 15
Не забывайте, что при перегрузке оператора
За исключением таких операторов, как
Завершая тему перегрузки операторов, рассмотрим пример, который часто называют квинтэссенцией примеров, посвященных перегрузке операторов, а именно класс строк. Несмотря на то что С++-подход к строкам (которые реализуются в виде символьных массивов с завершающим нулем, а не в качестве отдельного типа) весьма эффективен и гибок, начинающие С++-программисты часто испытывают недостаток в понятийной ясности реализации строк, которая присутствует в таких языках, как BASIC. Конечно же, эту ситуацию нетрудно изменить, поскольку в C++ существует возможность определить класс строк, который будет обеспечивать реализацию строк подобно тому, как это сделано в других языках программирования. По правде говоря, "на заре" развития C++ реализация класса строк была забавой для программистов. И хотя стандарт C++ теперь определяет строковый класс, который описан ниже в этой книге, вам будет полезно реализовать простой вариант такого класса самим. Это упражнение наглядно иллюстрирует мощь механизма перегрузки операторов.
Сначала определим "классовый" тип
#include
#include
using namespace std;
class str_type {
char string[80];
public:
str_type(char *str = "") { strcpy(string, str); }
str_type operator+(str_type str); // конкатенация строк
str_type operator=(str_type str); // присваивание строк
// Вывод строки
void show_str() { cout << string; }
};
Как видите, в классе
Этот класс имеет один конструктор, который можно использовать для инициализации массива
// Конкатенация двух строк.
str_type str_type::operator+(str_type str) {
str_type temp;
strcpy(temp.string, string);
strcat(temp.string, str.string);
return temp;
}
// Присваивание одной строки другой.
str_type str_type::operator=(str_type str) {
strcpy(string, str.string);
return *this;
}
Имея определения этих функций, покажем, как их можно использовать на примере следующей функции main().
int main()
{
str_type а("Всем "), b("привет"), с;
с = а + b;
с.show_str();
return 0;
}