русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Перегрузка операторов.


Дата добавления: 2015-07-09; просмотров: 538; Нарушение авторских прав


Для стандартных типов (int, float, double) в языке С определены стандартные операторы (+,-, *, и т.д.)

Язык С++ позволяет переопределить стандартные операторы для типов данных, созданных пользователем. Для примера рассмотрим класс

Complex, характеризующий комплексные числа (КЧ).

 

//orerload.h

#include<iostream.h>

class complex { //

private:

double re, im; //

public:

complex(double aRe= , double anIm=0)//

{ re=aRe; im=anIm;}

Complex operator+(const Complex c1);//

Complex operator-(const Complex c1);//

Complex operator-( );

Complex operator- - ( );

Complex operator + + ( );

Complex operator - - (int);

Complex operator(int);

int operator= = (const Complex &C1);

int operator!=(const Complex &C1);

friend istream operator>>(istream&,Complex&);

friend ostream operator<<(ostream,Complex);};

 

В закрытой части класса имеются поля: Re и Im, характеризующие Re и Im части КЧ. Для этого класса переопределены операторы сложения, вычитания, отрицания, префиксного инкремента, декремента, постфиксного инкремента, постфиксного декремента, операторы=,!=, операторы записи в поток и извлечения из потока.

 

Для примера рассмотрим оператор префиксного инкремента

 

Complex Complex:: operator++( ) //

{ re=re+1;return * tnis;}

 

Этот оператор увеличивает значение КЧ на 1. Оператор возвращает ссылку на измененное КЧ. Ключевое слово this - это указатель на самого себя. Постфиксный операторы возвращают неизмененное значение, поэтому при определении постфиксного инкремента мы создаем временное КЧ temp, а затем, изменив КЧ, возвращает temp т.е. старое значение КЧ.

 

Complex Complex:: operator ++(int) //

{ complex Temp(re,im)

re=re+1;

return Temp;



}

 

Аналогично реализованы операторы префиксного и постфиксного декремента (а++).

 

Рассмотрим оператор сравнения

int Complex:: operator==(const Complex&(1))

{

if(re==C1.re&&im==C1.im)

return1;

else

return 0;

}

 

Оператор возвращает 1, если числа равны, 0- если не равны.

 

Оператор вывода в поток

 

ostream&operator <<(ostream &os,Complex &a)

{ os<< «(«<<a.Re<<»,»<<a.im<<»)»<<end;

return os;}

 

Этот оператор переопределен как дружественная функция=> принимает 2 параметра. Он возвращает ссылку на поток вывода ostream. Рассмотрим его использование.

Complex C; (22)

оstream os; (23)

os.open(« « my.txt»); (24)

os<<c;//вывод в файл

cout<<c;//вывод на экран

В 22- создание объекта ( переменной с типа complex ).

В 23- создание объекта os для вывода в файл.

В 24- вызов метода open объекта os для записи в файл my.txt.

В следующей строке- запись КЧ в файл.

Для вывода на экран КЧ используется поток cout.

 

Для класса complex определили оператор <<( оператор записи в поток). Он может записывать КЧ в поток вывода, производной от ostream( например в поток cout), но это не обязательно должен быть поток cout. Так, в этой программе мы создали поток os- поток вывода в файл и записали туда КЧ. Аналогично перегружается оператор ввода из пот ока (25).

istream @ operator>> ( istream &os, Complex&a) //(25)

{ os>> a.re;

os>> a.im;

return is;}

 

Пример использования:

Complex c; (26)

ifstream is; (27)

is.open(«my.txt»); (28)

is>>c;// ввод из файла

cin>>c;// ввод с клавиатуры

 

Пример работы с классом Complex.

// main.cpp

#include<iostream.h>

#include»complex.h»

void main(void)

{

Complex a,b,c; (29)

cout<< “enter a” <<endl;

cin >>a; (30)

cout<<”enter b”<<endl;

cin>>b; (31)

c=a+b; (32)

cout<<”c=”<<c<<endl; (33)

cout<<”-c=”<<-c<<endl; (34)

cout<<”c++=”<<c++<<endl; (35)

cout <<”++c=”<<++c<<endl; (36)

if(a==b) cont<<”равны”; (37)

else cout<<” не равны”; }

 

Создается 3 КЧ (29);

Проверяются операторы ввода из потока (30) и (31), оператор сложения(32), оператор вывода (33), смены знака (34), постфиксный инкремент(35), префиксный инкремент (36), оператор «равно» (37). В результате получился законченный класс, характеризующий КЧ.

 

 



<== предыдущая лекция | следующая лекция ==>
О функциях-друзьях | Паспорт программы.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.335 сек.