C++ за 21 день седьмое издание



Download 1,38 Mb.
bet220/437
Sana22.02.2022
Hajmi1,38 Mb.
#89455
TuriРеферат
1   ...   216   217   218   219   220   221   222   223   ...   437
Bog'liq
word1

#include




  1. using namespace std;



2 :

  1. class Date




  1. {




  1. private:




  1. int Day, Month, Year;








  1. public:








  1. // Конструктор, инициализирующий объект днем, месяцем и годом




  1. Date (int InputDay, int InputMonth, int InputYear)




  1. : Day (InputDay), Month (InputMonth), Year (InputYear) {};







14: bool operator== (const Dates compareTo)



  1. {




  1. return ((Day == compareTo.Day)




  1. SS (Month == compareTo.Month)




  1. SS (Year == compareTo.Year));




  1. }

2 0 :

bool operator!= (const Dates compareTo)

21:

2 2 :

{

Бинарные операторы

319




  1. return !(this->operator==(compareTo));




  1. }



25:


26: void DisplayDate ()



  1. {

  2. cout « Day « " / " « Month




  1. }




  1. };



31:



V V




V V




  1. int main ()




  1. {




  1. Date Holidayl (25, 12, 2011);




  1. Date Holiday2 (31, 12, 2011);








  1. cout « "Holiday 1 is: ";




  1. Holidayl.DisplayDate();




  1. cout « "Holiday 2 is: ";




  1. Holiday2.DisplayDate();








  1. if (Holidayl == Holiday2)




  1. cout « "Equality operator: The two are on




      1. endl;




    1. else




    1. cout « "Equality operator: The two are on




      1. endl;



46:



  1. if (Holidayl != Holiday2)




  1. . cout « "Inequality operator: The two are <




    1. endl;




  1. else




  1. cout « "Inequality operator: The two are <




    1. endl;



51:



  1. return 0;




  1. }



Результат


Holiday 1 is: 25 / 12 / 2011


Holiday 2 is: 31 / 12 / 2011


Equality operator: The two are on different days


Inequality operator: The two are on different days


Анализ

Оператор равенства (==) является простой реализацией, которая возвращ ает исти­ ну, если день, месяц и год равны, как показано в строках 14-19. Оператор неравенства (! =) — это просто повторное использование кода оператора равенства, как представлено в строке 23. Присутствие этих операторов позволяет сравнить два объекта ( H o lid a y l и H o lid a y 2 ) класса D ate в функции m ain () (строки 42 и 47).



320 ЗАНЯТИЕ 12. Типы операторов и их перегрузка


Перегрузка операторов <, >, <= и >=

Код листинга 12.7 сделал класс D ate достаточно интеллектуальным, чтобы быть в со­ стоянии сказать, равны ли два объекта класса D a te или нет. Но что если пользователю класса нужно выполнить такую проверку условия, как эта:




if (Datel < Date2) {// Сделать нечто}

или эта:



if (Datel <= Date2) {// Сделать нечто}

или эта:



if (Datel > Date2) {// Сделать нечто}

или эта:



if (greatDay >= Date2) {// Сделать нечто}

Пользователь календарного класса определенно нашел бы очень полезным, если бы мог просто сравнить две даты, чтобы узнать, предшествует ли этот день настоящему или следует за ним. Разработчик класса должен реализовать эти операторы сравнения, чтобы сделать использование своего класса столь же дружественным к пользователю и интуи­ тивно понятным, насколько возможно, как демонстрирует код листинга 12.8.


ЛИСТИНГ 12.8. Реализация операторов «=, > и >=___________________________________





  1. #include




  1. using namespace std;



2 :

    1. class Date




    1. {




    1. private:




      1. int Day, Month, Year;








      1. public:








      1. // Конструктор, инициализирующий объект днем, месяцем и годом




      1. Date (int InputDay, int InputMonth, int InputYear)




      1. : Day (InputDay), Month (InputMonth), Year (InputYear) {};








    1. bool operator== (const Dates compareTo)




    1. {




    1. return ((Day == compareTo.Day)




    1. && (Month == compareTo.Month)




    1. && (Year == compareTo.Year));




    1. }



2 0 :

  1. bool operator< (const Dates compareTo)

22: {

  1. if (Year < compareTo.Year)




  1. return true;




  1. else if (Month < compareTo.Month)




  1. return true;




  1. else if (Day < compareTo.Day)

Бинарные операторы

321

return true,*'




: э else



  1. return false;

  2. }

22


23 bool operator<= (const Dates compareTo)



  1. {




  1. if (this->operator== (compareTo))

    26

    return

    true;

    37

    else

    this->operator< (compareTo);

    28

    return

  2. }





  1. bool operator > (const Dates compareTo)

  2. {




  1. return !(this->operator<= (compareTo));




  1. }



45



  1. bool operator>= (const Dates compareTo)




  1. {




  1. if(this->operator== (compareTo))




  1. return true;




  1. else




  1. return this->operator> (compareTo);




  1. }



53



  1. bool operator!= (const Dates compareTo)




  1. {




  1. return !(this->operator==(compareTo));




  1. }



58



  1. void DisplayDate ()




  1. {



61 cout « Day « " / " « Month « " / " « Year « endl;

  1. }












  1. int main()




  1. {

  2. Date Holidayl (25, 12, 2011);




  1. Date Holiday2 (31, 12, 2011);








  1. cout « "Holiday 1 is: ";




  1. Holidayl.DisplayDate();




  1. cout « "Holiday 2 is: ";




  1. Holiday2.DisplayDate();








  1. if (Holidayl < Holiday2)




  1. cout « "operatorC Holidayl happens first" « endl;








  1. if (Holiday2 > Holidayl)




  1. cout « "operator>: Holiday2 happens later" « endl;








  1. if (Holidayl <= Holiday2)1




11 3ak. 3626

322 ЗАНЯТИЕ 12. Типы операторов и их перегрузка


82: cout « "operator<=: Holidayl happens on or before Holiday2"



  1. endl;



83:



  1. if (Holiday2 >= Holidayl)




  1. cout « "operator>=: Holiday2 happens on or after Holidayl"




  1. endl^-

eS:

  1. return 0;



88: }


Результат


Holiday 1 is: 25 / 12 / 2011


Holiday 2 is: 31 / 12 / 2011


operatorc Holidayl happens first


operator>: Holiday2 happens later


operator<=: Holidayl happens on or before Holiday2


operator>=: Holiday2 happens on or after Holidayl


Анализ

Представляющие интерес операторы реализованы в строках 21-52 и частично повтор­ но используют оператор == из листинга 12.7. Обратите внимание, как эти операторы были реализованы: в основном за счет повторного использования одного или другого.


Применение этих операторов в строках 75 -84 функции m ain () демонстрирует, на­ сколько реализация этих операторов делает использование класса D ate простым и интуи­ тивно понятным.




Перегрузка оператора присвоения копии (=)

Нередко содержимое экземпляра класса необходимо присвоить другому экземпляру так:




Date Holiday(25, 12, 2011);


Date AnotherHoliday(1, 1, 2010);


AnotherHoliday = Holiday; // использование оператора присвоения копий

Это приведет к вызову стандартного оператора присвоения копий, который компилятор встроит в ваш класс, если вы не предоставите таковой. В зависимости от характера ваше­ го класса стандартный конструктор копий может оказаться неадекватным, особенно если ваш класс задействует ресурс, который не будет скопирован. Чтобы гарантировать более глубокое копирование, как с конструктором копий, необходимо определить собственный оператор присвоения копий:





Download 1,38 Mb.

Do'stlaringiz bilan baham:
1   ...   216   217   218   219   220   221   222   223   ...   437




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish