Перегрузка операции инкремента и декремента 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Перегрузка операции инкремента и декремента



Т.к. в С++ операции инкремента и декремента существуют в двух видах, а именно в префиксной и постфиксной формах, то при перегрузке нужно учесть этот фактор.

Class Length

{private:

Double len;

Length& operator++();

Const Length operator ++ (int);

Length& operator -- ();

Const Length operator -- (int);

// остальная часть класса

};

Первое, чем отличаются перегруженные формы операции – списками параметров. Префиксная форма не принимает параметр, а постфиксная принимает параметр типа int. Параметр в функции постфиксной операции служит для того, чтобы отличать ее от префиксной формы и никак не используется в реализации операции. Операции префиксного инкремента и декремента обрабатывают операнд перед тем, как его значение будет использовано в выражении, поэтому просто возвращается ссылка на текущий объект после того, как он будет увеличен или уменьшен. С постфиксной формой операнд увеличивается после того, как его текущее значение используется в выражении. Это достигается созданием копии текущего объекта перед выполнением самой операции. И возвратом этой копии после модификации объекта.

Шаблоны классов

 

… пол пары пропуска …

Пример, иллюстрирующий использование шаблона:

Допустим, что нужно определить классы, которые могут хранить количество выборок данных некоторого вида. Каждый класс представляет функцию Max() для определения максимальной выборки.

Template <class T>

Class Samples

{ public:

Samples (const T& Values [], int const) – конструктор, принимающий массив выборок.

{Free=(count<100)?count:100;

For (int i=0; i<Free, i++)

Values[i]=values[i];}

 

Samples (const T& Value) – одну выборку

{Values[0]=Value; Free=1;};

 

Sample(){Free=0;} – пустой конструктор по умолчанию

 

Bool Add (const T& value)

{bool OK=Free<100;

If(OK) Values[Free++]=value; return OK;}

 

T Max()const

{T theMax=Free? Values[0]:0;

For (int i=1; i<Free; i++)

{if (Values[i]>theMax) theMax=Values[i];

Return theMax;}

 

Private: T Values[100]; int Free;};

 

Примечание: всегда можно определить шаблон, который работает только с некоторыми типами, а с другими не работает. Но нет способа ограничить типы, применимые с конкретным шаблоном.

 

Int main(){Box boxes[]={box(8.0,5.0,2.0), box(5.0,4.0,6.0), box(4.0,3.0,3.0);}

Samples <Box>myboxes(boxes, size of boxes/size of boxes[0])

Cout<<endl<<”The Volume of the most bigger box is “<<myBoxes.Max()<<endl;

Return 0;}

 

Если функция-член шаблона не вызывается, то даже если в ней содержатся ошибки, то программа будет компилироваться, пока она не будет вызвана.

 

Пропуски:

22.02

07.03

02.05

30.05



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 152; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.233.150 (0.005 с.)