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



Download 1,38 Mb.
bet217/437
Sana22.02.2022
Hajmi1,38 Mb.
#89455
TuriРеферат
1   ...   213   214   215   216   217   218   219   220   ...   437
Bog'liq
word1

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

Операторы, работающ ие с двумя операндами, называются бинарными операторами (binary operator). Определение бинарного оператора, реализованного как глобальная функ­ ция или статическая функция-член, имеет следующий вид:




тип_возвращаемого_значения тип_оператора (параметр1, параметр2) ;

Определение бинарного оператора, реализованного как член класса, имеет следующий вид:




тип_возвращаемого_значения тип_оператора (параметр);

Бинарный оператор получает только один параметр в версии члена класса, потому что второй параметр обычно является атрибутом самого класса.




Типы бинарных операторов

Бинарные операторы, которые могут быть перегружены или переопределены в при­ ложении C++, приведены в табл.* 12.2.


ТАБЛИЦА 12.2. Перегружаемые бинарные операторы




Оператор Название



  1. Запятая




I =

Неравенство




О,

Деление по модулю

о

О ,__

Деление по модулю с присвоением

О —

&

Побитовое AND

&&

Логическое AND

&=

Побитовое AND с присвоением



Умножение




* =

Умножение с присвоением




+

Сложение

+=

Сложение с присвоением

-

Вычитание

-=

Вычитание с присвоением

-> *

Косвенное обращ ение к указателю на член класса

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

313



Окончание табл. 12.2


Оператор Название



  1. Деление

/= Деление с присвоением



  1. Меньше

  2. Сдвиг влево




« =

Сдвиг влево с присвоением

<=

М еньш е или равно

  1. Присвоение, присвоение копии и присвоение перемещения

  2. Равенство

  3. Больше

>= Больше или равно

  1. Сдвиг вправо




» =

Сдвиг вправо с присвоением

А

Исключающее OR




А __

Исключающее OR с присвоением




1

Побитовое OR

| =

Побитовое OR с присвоением

11

Логическое OR

[]

Оператор индексирования

Создание бинарных операторов сложения (а + Ь) и вычитания (а - Ь)

Подобно операторам инкремента и декремента, бинарные операторы “плю с” и “ми­ нус”, будучи определены, позволяют добавлять и вычитать значения поддерживаемого типа данных из объекта класса, который реализует эти операторы. Вернемся к нашему календарному классу D ate . Хотя мы уже реализовали в нем возможность инкремента, переводящего календарь на один день вперед, он еще не поддерживает возможность пере­ вода, скажем, на пять дней вперед. Для этого необходимо реализовать бинарный оператор (+), как демонстрирует код листинга 12.5.



  1. И СТИ Н Г 1 2 .5 . Календарный класс с бинарным оператором суммы__________________________




    1. #include




    1. using namespace std;

  1. :




    1. class Date




    1. {




    1. private:




    1. int Day, Month, Year;








    1. public:



9:


10:

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





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




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








  1. // Бинарный оператор суммы



15: Date operator + (int DaysToAdd)



  1. {




  1. Date newDate (Day + DaysToAdd, Month, Year);




  1. return newDate;




  1. }

2 0 :

  1. // Бинарный оператор вычитания



22: Date operator - (int DaysToSub)



  1. {




  1. return Date(Day - DaysToSub, Month, Year);




  1. }



26:



  1. void DisplayDate ()




  1. {



29: cout « Day « " / " « Month « " / " « Year « endl;



  1. }




  1. };








  1. int main ()




  1. {




  1. // Создать экземпляр и инициализировать его // датой 25 декабря 2011 года

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



37:



  1. cout « "Holiday on: ";




  1. Holiday.DisplayDate ();








  1. Date PreviousHoliday (Holiday - 19);




  1. cout « "Previous holiday on: ";




  1. PreviousHoliday.DisplayDate();



44:



  1. Date NextHoliday(Holiday + 6);




  1. cout « "Next holiday on: ";




  1. NextHoliday.DisplayDate ();








  1. return 0;




  1. }



Результат


Holiday on: 25 / 12 / 2011


Previous holiday on: 6 / 12 / 2011


Next holiday on: 31 / 12 / 2011


Анализ

Строки 14-25 содержат реализации бинарных операторов (+) и (-), которые позволяют использовать синтаксис простого сложения и вычитания, как можно заметить в строках 41 и 45 функции m ain ().



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

315

Бинарный оператор суммы также был бы очень полезен в случае создания строкового класса. На занятии 9, “Классы и объекты”, мы уже анализировали простой класс оболочки строки M y S trin g , инкапсулирующий управление памятью, копирование и так далее для символьной строки стиля С (см. листинг 9.9). Но что не поддерживает этот класс, так это конкатенацию двух строк с использованием следующего синтаксиса:




MyString Hello("Hello ") ;


MyString World(" World");


MyString HelloWorld(Hello + World); // ошибка: оператор + не определен

Само собой разумеется, оператор (+) чрезвычайно упростил бы использование класса


M yS tring, а следовательно, он стоит потраченных на него усилий:




MyString operator* (const MyString& AddThis)

{
MyString NewString;




if (AddThis.Buffer != NULL)
{


NewString.Buffer = new char[GetLength() \



  1. strlen(AddThis.Buffer) + 1];



strcpy(NewString.Buffer, Buffer); strcat(NewString.Buffer, AddThis.Buffer);
}


return NewString;

}


Чтобы получить возможность использовать синтаксис сложения, добавьте приведен­ ный выше код в листинг 9.9 с закрытым стандартным конструктором M y S trin g () и пу­ стой реализацией. Вы можете увидеть версию класса M y S trin g с оператором (+) среди прочих в листинге 12.12.
Операторы обеспечивают удобство и простоту использования класса. Однако необходимо реализовать только те из них, которые имеют смысл. Обратите вни­ мание, что для класса Date мы реализовали операторы сложения и вычитания,



  1. для класса MyString только оператор суммы (+). Поскольку выполнение операций вычитания со строками весьма мало вероятно, такой оператор не нашел бы применения.

Реализация операторов сложения с присвоением (+=)и вычитания с присвоением (-=)

Операторы сложения с присвоением обеспечивают такой синтаксис, как “а += Ь ; ”, позволяющий программисту увеличивать значение объекта а на значение Ь. Преимущ е­ ство оператора сложения с присвоением в том, что он может быть перегружен так, чтобы получать параметры b различных типов. Приведенный ниже листинг 12.6 позволяет до ­ бавлять целочисленное значение к объекту CDate.


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


ЛИСТИНГ 12.6. Определение операторов (+=) и (-=)


для добавления и вычитания введенных дней_______________________________





  1. #include




  1. using namespace std;



2 :

  1. class Date




  1. {




  1. private:




  1. int Day, Month, Year;








  1. public:



9:



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




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




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








  1. // Бинарный оператор сложения с присвоением




  1. void operator+= (int DaysToAdd)




  1. {




  1. Day += DaysToAdd;




  1. }



19:



  1. // Binary subtraction assignment




  1. void operator-= (int DaysToSub)

22: {

  1. Day -= DaysToSub;




  1. }



25:



  1. void DisplayDate ()




  1. {



28: cout « Day « " / " « Month « " / " « Year « endl;



  1. }




  1. };









  1. Download 1,38 Mb.

    Do'stlaringiz bilan baham:
1   ...   213   214   215   216   217   218   219   220   ...   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