Преобразование типов позволяет нам обойти запрет на определение новых операций для встроенных типов. Для этого мы должны определить класс-оболочку для встроенного типа и реализовать в этом классе преобразование типов и требуемые операции. Давайте реализуем операцию возведения в целую степень для типа double. Класс-оболочка представлен в листинге 3.16.
Листинг 3.1 б. Класс-оболочка Real для double class Real { double t; public:
Real (const double &a=0.0){ t = a;} // double -> Real
operator double () { return t; } // Real -> double
// "новая" операция возведения в целую степень
Real operatorA(int d)
{ double г = t;
if (d==0) return 1; // tA0 = 1
else if (r==0) return 0; // 0Ad = 0
else if (d==l) return *this; // tAl = t
else if (d<0) { r=l/r; d=-d; } // tA(-d)=(l/t)Ad
double р = 1;
for(int i=l; !(i>d); i++) p* = r; // вычисляем степень
return p; // неявное преобразование
}
}:
Проверка показывает, что все варианты работают правильно: int main()
Real t = 2:
cout << (tA0) << endl; II 2A0 = 1
cout << (tAl) << endl; II 2A1 = 2
t = 1;
cout << (tA12) << endl; II 1A12 = 1
cout << (tA-2) << endl; II lA-2 = 1
t = 0:
cout << (tA0) << endl; II 0A0 = 1
cout << (tA3) << endl; II 0A3 = 0
t = 2:
cout << (tA2) << endl; II 2A2 = 4
cout << (tA-2) << endl; II 2A-2 = 0
return i 0:
}
Но надо помнить, что эта операция работает только для переменных типа Real — константы типа double таким способом возводить в степень не получится.
Таким образом, мы можем легко ввести «новые» арифметические операции для любого встроенного типа данных. Если вы делаете ремонт в своем доме, то http://woody-floor.ru/index/nastil_linoleuma/0-9 вы можете заказать тут.
Например, для i nt можно написать класс integer, который инкапсулирует все, касающееся целых чисел. Собственно, мы действовали аналогично разработчикам языка программирования Java, реализовав тип-оболочку для встроенного типа данных. |