Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры резать.doc
Скачиваний:
5
Добавлен:
21.12.2018
Размер:
1.24 Mб
Скачать

Int main(void)

{

Time cT1; //Time::Time();

time_t t;

time(&t);

Time T2(ctime(&t)); //Time::Time(char*);

}

Язык C++ позволяет вам определять и применять к вашему классу обозначения операторов. Эта особенность, называемая перегрузкой операторов, дает вашему классу возможность вести себя подобно встроенному типу данных. Вы можете перегружать для ваших классов любые из следующих операторов, (см. табл. 4).

Таблица 4

Список операторов, для которых разрешена перегрузка

Следующие операторы не допускают перегрузку, (см. табл. 5).

Таблица 5

Список операторов, для которых запрещена перегрузка

Перегрузка операторов подчиняется следующим правилам:

• приоритеты операторов и правила ассоциации, принятые для встроенных типов данных, остаются неизменными при оценке выражений с перегруженными операторными функциями;

• операторная функция не может изменить поведение оператора по отношению к встроенным типам данных;

• операторная функция должна быть либо элементом класса, либо воспринимать один или несколько аргументов, имеющих тип класса;

• операторная функция не может иметь аргументов по умолчанию;

• за исключением оператора operator=() операторные функции наследуются.

Имя операторной функции начинается с ключевого слова operator, за которым следует сам оператор, например operator<<. Операторная функция объявляется и может быть вызвана, как любая другая функция. Использование операторной функции как оператора является просто сокращенной формой ее явного вызова. Например, если для некоторого класса Complex определен оператор +, то следующие формы вызова этого оператора являются эквивалентными:

void f(Complex a, Complex b)

{

Complex c = a + b; //сокращенная форма

Complex d = a .operator+ (b); //полная форма

}

Нужно отметить, что необходимо соблюдать осторожность при переопределении операторов, особенно при переопределении оператора присваивания. Так, например, вы должны предусмотреть присваивание объекта самому себе. В некоторых ситуациях упущение этого момента может запросто привести к зависанию программы. Такая проверка чаще всего осуществляется путем сравнения адресов объектов, стоящих справа и слева от знака равенства.