Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Class dek_koord. { int x,y; // декартовы координаты точки




{ int x,y; // декартовы координаты точки

public:

...

int read_x(); // возвращает компоненту x

int read_y(); // возвращает компоненту y

void write_x(int); // модифицирует компоненту x

void write_y(int); // модифицирует компоненту y

...

};

int dek_koord::read_x(){return x;}

int dek_koord::read_y(){return y;}

void dek_koord::write_x(int a){x=a;}

void dek_koord::write_y(int a){y=a;}

dek_koord operator*(dek_koord a,dek_koord b) // перегрузка операции *

{ dek_koord tmp; // функция operator − глобальная

tmp.write_x(a.read_x()*b.read_x());

tmp.write_y(a.read_y()*b.read_y());

return tmp;

}

В глобальной функции operator* доступ к private данным локального объекта tmp возможен через public-функции этого объекта, либо данные класса должны иметь атрибут public, что не отвечает принципу инкапсуляции. Кроме того, если функция operator является friend-функцией некоторого класса, то она имеет доступ к private-компонентам этого класса. Это будет рассмотрено несколько ниже.

Далее приведен пример еще одной программы перегрузки оператора «-» для использования его при вычитании из одной строки другой.

#include <iostream>

using namespace std;

#include <string.h>

Class String

{ char str[80]; // локальная компонента

public: // глобальные компоненты

void init (char *s); // функция инициализации

int operator - (String s_new); // прототип функции operator

} my_string1, my_string2; // описание двух объектов класса String

void String::init (char *s) // функция обеспечивает копирование

// строки аргумента(s) в строку-компоненту

{ strcpy(str,s);} // (str) класса String

int String::operator - (String s_new) // перегрузка оператора – (вычитания

// строк)

{ for (int i=0; str[i]==s_new.str[i]; i++)

if (!str[i]) return 0;

return str[i] - s_new.str[i];

}

int main()

{ char s1[51], s2[51];

cout <<"Введите первую строку (не более 80 символов):" <<endl;

cin >>s1;

cout<<" Введите вторую строку (не более 80 символов): "<<endl;

cin>>s2;

my_string1.init(s1); //инициализация объекта my_string1

my_string2.init(s2); //инициализация объекта my_string2

cout <<"\nString1 - String2 = "; // вывод на экран разности двух строк

cout << my_string1 - my_string2 << endl;

return 0;

}

Результат работы программы:

Введите первую строку (не более 80 символов):

overload

Введите вторую строку (не более 80 символов):

function

String1 – String2 = 9

При перегрузке бинарного оператора с использованием компоненты-функции ей передается в качестве параметра только один аргумент. Второй аргумент получается посредством использования неявного указателя this на объект, компоненты которого модифицируются.





Поделиться с друзьями:


Дата добавления: 2015-09-20; Мы поможем в написании ваших работ!; просмотров: 1151 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Что разум человека может постигнуть и во что он может поверить, того он способен достичь © Наполеон Хилл
==> читать все изречения...

2510 - | 2325 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.