Return Counter(count);
відбуваються ті самі дії, які в програмі 14.2 займали три рядки. Тут створюється об’єкт типу Counter. Він не має імені, бо воно ніде не використовуватиметься. Цей об’єкт ініціалізується значенням, одержаним у вигляді параметра count.
Зверніть увагу, що, порівняно з попередньою програмою, додався конструктор з одним параметром
Counter(int c):count(c)
{}
Об’єкт, ініціалізований значенням count, може бути повернутий функцією. Результат цієї програми такий же, як і попередньої..
Постфіксні операції
Досі ми застосовували операцію збільшення, використовуючи тільки префіксний запис
++с1
А як можна використовувати постфіксний запис, де змінна збільшується після того, як її значення було використано у виразі с1++ ?
Щоб мати змогу працювати з двома версіями операції, ми визначимо два варіанти перезавантаження операції ++. Це показано в програмі 14.4
#include <iostream.h>
#include <conio.h>
#include <bios.h>
class Counter
{private:
unsigned int count;
public:
Counter():count(0) //constructor
{ }
Counter (int c):count(с)
{ }
unsigned int get_count()
{return count;}
Counter operator++ ()
{return Counter(++count);}
Counter operator++ (int)
{return Counter(count++);}
};
////////////////////
int main()
{
clrscr();
Counter c1,c2;
cout << “\nc1=”<<c1.get_count();
cout <<”\nc2=”<<c2.get_count()<<endl;
++c1;
c2=++c1;
cout <<”\nPrefix”<<endl;
cout << “c1=”<<c1.get_count();
cout <<”\nc2=”<<c2.get_count();
cout <<endl;
c2=c1++;
cout <<”\nPostfix”<<endl;
cout << “c1=”<<c1.get_count();
cout <<”\nc2=”<<c2.get_count();
bioskey(0);
return 0;
}
Програма 14.4
Тепер ми маємо два типи оголошення функції operator++. З однією з них, для префіксної операції, ми вже познайомилися.
Counter operator++ ()
Для реалізації постфіксної операції ++ використаємо нову функцію:
Counter operator++ (int)
Різниця між цими функціями лише в тому, що в дужках проставлено int. Тут int не грає ролі аргументу і не означає цілого числа. Це просто сигнал для компілятора, щоб використовувалася постфіксна версія операції. Розробники С++ вважали корисним повторне використання існуючих операцій і ключових слів; в даному випадку int призначена також для позначення постфіксної операції.
Перезавантаження бінарних операцій
Бінарні операції можуть бути перезавантажені так само, як унарні. Ми розглянемо приклади перезавантаження арифметичних операцій, операцій порівняння та операції присвоювання.
Арифметичні операції
В програмі 11.5 ми розглядали два об’єкти класу Distance, які додавалися за допомогою методу add_dist()
dist3.add_dist(dist1,dist2);
Використовуючи перезавантаження операції +, ми можемо записати подібний вираз зрозуміліше:
dist3=dist1+dist2
Ця можливість реалізована в лістінгу програми 14.5
#include <iostream.h>
#include <conio.h>
#include <bios.h>
class Distance
{private:
int feet;
float inches;
public:
Distance():feet(0),inches(0.0) //конструктор без параметрів
{ }
//конструктор з 2 параметрами
Distance(int ft,float in):feet(ft),inches(in)
{ }
void getdist()
{cout <<”\nВведіть число футів “; cin >>feet;
cout << “дюймів “; cin>>inches;
}
void showdist()
{cout <<feet << “\’ “<< inches <<”\’’”;}
Distance operator+(Distance) const;
};
//Додавання d2 I d3
Distance Distance::operator+(Distance d2) const
{
int f=feet+d2.feet;
float i=inches+d2.inches;
if(i>=12.0)
{i-=12.0;
f++;}
Дата добавления: 2015-08-26; просмотров: 680;