Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Операции Преобразования



Функция член X::operator T(), где T — имя типа, определяет преобразование из X в T. Например, можно определить тип tiny (крошечный), который может иметь значение только в диапазоне 0...63, но все равно может свободно сочетаться в целыми в арифметических операциях:

class tiny { char v; int assign(int i) { return v = (i&~63)? (printf("ошибка диапазона"), 0): i; }public: tiny(int i) { assign(i); } tiny(tiny &i) { v = i.v; } int operator=(tiny &i) { return v = i.v; } int operator=(int i) { return assign(i); } operator int() { return v; }};

Диапазон значения проверяется всегда, когда tiny инициализируется int, и всегда, когда ему присваивается int. Одно tiny может присваиваться другому без проверки диапазона. Чтобы разрешить выполнять над переменными tiny обычные целые операции, определяется tiny::operator int(), неявное преобразование из int в tiny. Всегда, когда в том месте, где требуется int, появляется tiny, используется соответствующий ему int. Например:

tiny c1 = 2;tiny c2 = 62;tiny c3 = c2 - c1; // c3 = 60tiny c4 = c3; // нет проверки диапазона (необязательна)int i = c1 + c2; // i = 64c1 = c2 + 2 * c1; // ошибка диапазона: c1 = 0 (а не 66)c2 = c1 -i; // ошибка диапазона: c2 = 0c3 = c2; // нет проверки диапазона (необязательна)

Пример

Добавим в класс PasSet операцию объединения множеств "+".

class PasSet { // ……………………………………………………. friend PasSet operator + (const PasSet &, const PasSet &);};PasSet operator + (const PasSet &a, const PasSet &b){ PasSet c; for (int i=0;i<32; i++) c.data[i]=a.data[i] | b.data[i]; return c;}

Лекция 13. Переопределение ввода-вывода на языке С++





Дата публикования: 2015-01-13; Прочитано: 193 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...