Информатика и технология программирования

       

Преобразование к базовому типу данных


В качестве примера рассмотрим неявное преобразование объекта класса dat к базовым типам данных int и long . Сущность его заключается в вычислении полного количества дней в дате, заданной входным объектом (long) и количества дней в текущем году в этой же дате (int). Для задания этих операции необходимо переопределить в классе dat одноименные операции int и long . Переопределяемые операции задаются соответствующими функциями-элементами без параметров. Тип результата совпадает с базовым типом, к которому осуществляется приведение и поэтому не указывается:


//------------------------------------------------------bk73-07.cpp


//------Преобразование к базовым типам данных


&#35include &#60stdio.h&#62
static int days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
class dat
{
int day,month,year;
public:
operator int(); // Преобразование dat в int


operator long(); // Преобразование dat в long


long operator -(dat &#38p); // Операция dat-dat вычисляет


dat(); // разность дат в днях


dat(char *);
};
//------ Преобразование dat в int -------------------------


dat::operator int()
{
int r; // Текущий результат


int i; // Счетчик месяцев


for (r=0, i=1; i&#60month; i++) // Число дней в прошедших


r += days[month]; // месяцах


if ((month&#62 2) &#38&#38 (year%4==0)) r++; // Високосный год




r += day; // Дней в текущем месяце


return(r);
}
//------ Преобразование dat в long ------------------------


dat::operator long()
{
long r; // Текущий результат


r = 365 * (year-1); // Дней в предыдущих полных годах


r += year / 4; // Високосные года


r += (int)(*this); // Дней в текущем году- предыдущая


return(r); // операция (явное преобразование dat в int)


}
//-------- Операция вычисления разницы двух дат -----------


long dat::operator-(dat&#38 p)
{
return((long)(*this) - (long)p); // Преобразовать оба объекта


} // к типу long и вычислить разность


void main()
{
dat a("12-05-1990"); // Дата, заданная строкой


dat b; // Текущая дата


int c;
long d; // Явное преобразование к long


cout &#60&#60 "С 12-05-1990 прошло" &#60&#60 (long)b-(long)a &#60&#60 "дней\n";
// Явное преобразование к int


cout &#60&#60 "В этом году прошло " &#60&#60 (int)b &#60&#60 " дней\n";
c = b; // Неявное преобразование при присваивании


d = b - a; // Операция dat-dat


printf("С 12-05-1990 прошло %4ld дней\n",d);
printf("В этом году прошло %3d дней\n",c);
}



Содержание раздела