Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP / lectures / 3_oop.ppt
Скачиваний:
57
Добавлен:
03.03.2016
Размер:
361.98 Кб
Скачать

Например, X::operator T() – преобразует X в T.

Пример. Объявление и использование класса tiny для работы с целыми числами в диапазоне 0..63.

class tiny { char v;

void assign(int i); //функция для проверки

попадания i в диапазон 0..63 public:

tiny(int i) { assign(i); }

tiny(const tiny& t) { v = t.v; } // конструктор копирования

tiny& operator=(const tiny& t) { v = t.v;

return *this;

}

tiny& operator=(int i) { assign(i);

return *this;

}

operator int() { return v; }

};

void tiny::assign(int i) { if (i>63) {

printf("выход из диапазона\n"); v=i&~192;

}

else if(i<0) {

printf("выход из диапазона\n"); v=0;

}

else v=i;

}

Примечание.

Операция «~» - дополнение до 1 (побитовая операция НЕ).

Для 192:

192 = 11000000; ~192=00111111.

Для i=66: i&~192=01000010&00111111=00000010=2.

i&~192 ≡ i&63 (в данном случае).

int main()

{

tiny c1 = 2; // tiny(int i) при i=2 tiny c2 = 62; // tiny(int i) при i=62

tiny c3 = c2-c1; // tiny(int i) при i=с2.operator int()-c1.operator int())

tiny c4 = c3; // tiny(const tiny& t) при t=c3 printf("c1=%d c2=%d c3=%d c4=%d\n\n", c1,

c2, c3, c3);

int i = c1+c2;

//с1.operator int()+c2.operator int() printf("i=%d\n\n",i);

c1=c2+2*c1;

//c1.operator =(int i) при i= c2.operator int() + 2 * c1.operator int()

printf("c1=%d\n\n",c1);

c2 = c1 - i; printf("c2=%d\n\n",c2);

c3 = c2;

//c1.operator =(const tiny& t) при t=c2 printf("c3=%d\n\n",c3);

return 0;

}

Перегрузка ++ и --

Префиксная форма:

Xoperator++(); Постфиксная форма:

Xoperator++(int);

Пример. Добавление в класс tiny для инкремента и декремента

class tiny {...

tiny operator++(); tiny operator++(int); tiny operator--(int);

};

tiny tiny::operator++() { v++;

assign(v); return *this;

}

tiny tiny::operator++(int) { v++;

assign(v); tiny temp(v); return temp;

}

tiny tiny::operator--(int){ v--;

assign(v); tiny temp(v); return temp;

}

int main() { setlocale(0,"RUS"); tiny c3=20;

printf("c3=%d\n\n",c3); c3--;

//компилятор генерирует вызов функции c3.operator--(0);

++c3;

//компилятор генерирует вызов функции c3.operator++();

printf("c3=%d\n\n",c3);

c3++;

//компилятор генерирует вызов функции c3.operator++(0);

printf("c3=%d\n\n",c3); return 0;

}

Соседние файлы в папке lectures