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


Преобразование типов данных и классы - часть 2


class man;
class dat
{
int day,month,year;
public:
dat(long); // Преобразование long в dat


dat(man&#38); // Преобразование man в dat


dat() {}
};


class man
{
friend class dat;
dat WasBorn; // объект класса dat в объекте класса man


public:
man(dat&#38); // Преобразование dat в man


};


//------ Преобразование man в dat ----------------------


dat::dat(man&#38 p)
{ *this = p.WasBorn; }
//------ Преобразование dat в man ------------------------


man::man(dat&#38 p)
{ WasBorn = p; }
//------ Преобразование long в dat ----------------------


dat::dat(long p)
{
year = p / 365.25; // Число лет с учетом високосных


p-=(year-1)*365L - year/4; // Остаток дней в текущем году


year++; // Начальный год - 0001


for (month=1; p &#62 0; month++)
{ // Вычитание дней по месяцам


p -= days[month];
if (month == 2 &#38&#38 year % 4 == 0) p--;
}
month--; // Восстановление последнего месяца


p += days[month];
if (month == 2 &#38&#38 year % 4 == 0) p++;
day = p + 1;
}
// Преобразование объектов класса имеет место при выполнении


// операций явного приведения типов, присваивания, а также


// при определении объектов с инициализацией их объектами


// приводимого класса


long l=1000;
dat a = l, b; // Вызов конструктора dat(long)


man c = a; // Вызов конструктора man(dat&#38)



man f(man a)
{ return(a); }


void main()
{
a = 2000L; / / Вызов конструктора dat(long)
(dat)3000L; // Вызов конструктора dat(long)


c = b; // Вызов конструктора man(dat&#38)


b = f(b); // Вызов конструктора dat(man&#38) при преобразовании


// типа параметра. Вызов конструктора man(dat&#38)


} // при преобразовании типа результата




Начало  Назад  Вперед



Книжный магазин