русс | укр

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

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

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

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


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

Void main(void)


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


{sum statement ("C++") ; //объект statement

statement.show_sum();

statement + "- удобный язык!";

statement.show_sum();}

 

В результате выполнения данной программы на экран дисп­лея будет выведено:

с++

C++ — удобный язык!

В языке C++ можно перегрузить практически все операторы, за исключением четырех:

. — оператор выбора элемента (оператор-точка);

* — указатель на элемент;

:: — оператор разрешения области видимости;

?: — условный оператор сравнения.

Применение перегрузки операторов позволяет в некоторых случаях улучшить удобочитаемость программ и упростить их понимание.

Примеры программ по

ПЕРЕГРУЗКЕ ОПЕРАТОРОВ ПЛЮС И МИНУС

 

Когда вы перегружаете оператор для какого-либо класса, то смысл данного оператора не изменяется для переменных других типов. Например, если вы перегружаете оператор плюс для класса string, то смысл этого оператора не изменяется, если необходимо сложить два числа. Когда компилятор С++ встречает в программе оператор, то на основании типа переменной он определяет ту операцию, которая должна быть выполнена.

Ниже приведено определение класса, создающее класс string. Этот класс содержит один элемент данных, который представляет собой собственно символьную строку. Кроме того, этот класс содержит несколько различных методов и пока не определяет каких-либо операторов:

 

class string

{

public:

string(char *); // Конструктор

void str_append(char *);

void chr_minus(char);

void show_string(void);

private:

char data[256] ;

};

Как видите, класс определяет функцию str_append, которая добавляет указанные символы к содержимому строки класса. Аналогичным образом функция chr_minus - удаляет каждое вхождение указанного символа из строки класса. Следующая программа STRCLASS.CPP использует класс string для создания двух объектов символьных строк и манипулирования ими.



#include <iostream.h>

#include <string.h>

class string

{ public:

string(char *); // Конструктор

void str_append(char *);

void chr_minus(char);

void show_string(void);

private:

char data[256] ;

};

 

string::string(char *str)

{

strcpy(data, str);

}

void string::str_append(char *str)

{

strcat(data, str);

}

void string::chr_minus(char letter)

{

char temp[256] ;

int i, j;

for (i = 0, j = 0; data[i]; i++) // Эту букву необходимо удалить?

if (data[i] != letter) // Если нет, присвоить ее temp

temp[j++] = data[i];

temp[j] = NULL; // Конец temp

// Копировать содержимое temp обратно в data

strcpy(data, temp);

}

void string::show_string(void)

{

cout << data << endl;

}

 

void main(void)

{

string title( "Учимся программировать на языке C++");

string lesson("Перегрузка операторов");

title.show_string() ;

title.str_append(" я учусь!");

itle.show_string();

lesson.show_string();

lesson.chr_minus('p') ;

lesson.show_string();

}

Как видите, программа использует функцию str_append для добавления символов к строковой переменной title. Программа также использует функцию chr_minus для удаления каждой буквы " р" из символьной строки lesson. В данном случае программа использует вызовы функции для выполнения этих операций. Однако, используя перегрузку операторов, программа может выполнять идентичные операции с помощью операторов плюс (+) и минус (-).

При перегрузке оператора используйте ключевое слово C++ operator вместе с прототипом и определением функции, чтобы сообщить компилятору C++, что класс будет использовать этот метод как оператор. Например, следующее определение класса использует ключевое слово operator, чтобы назначить операторы плюс и минус функциям str_append и chr_minus внутри класса string:

 

class string

 

{

public:

string(char *); // Конструктор

void operator +(char *);

void operator -(char); ————— Определение операторов класса void show_string(void);

private:

char data[256];

};

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

void string::operator +(char *str)

{

strcat(data, str);

}

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

Следующая программа OPOVERLD.CPP иллюстрирует использование перегружаемых операторов плюс и минус:

#include <iostream.h>

#include <string.h>

class string

{

public:

string(char *); // Конструктор

void operator +(char *);

void operator -(char);

void show_string(void);

private;

char data[256] ;

};

string::string(char *str)

{

strcpy(data, str);

}

void string::operator +(char *str)

{

strcat(data, str);

}

void string::operator -(char letter)

{

char temp[256] ;

int i, j;

for (i = 0, j = 0; data[i]; i++) if (data[il 1= letter) temp[j++] = data[i];

temp[j] = NULL;

strcpy(data, temp);

}

void string::show_string(void)

 

{

cout << data << endl;

}

void main(void)

{

string title( "Учимся программировать на C++");

string lesson("Перегрузка операторов");

title.show_string();

title + " я учусь!";

title.show_string() ;

lesson.show_string();

lesson - 'P';

lesson.show_string();

}

 

Как видите, программа использует перегруженные операторы:

 

title + " я учусь!"; // Добавить текст " я учусь!"

 

lesson - 'р'; // Удалить букву 'р'

 

В данном случае синтаксис оператора законен, но немного непривычен. Обычно вы используете оператор плюс в выражении, которое возвращает результат, например, как в операторе some_str = title + "текст ";. Когда вы определяете оператор, C++ предоставляет вам полную свободу в отношении поведения оператора. Однако, как вы помните, ваша цель при перегрузке операторов состоит в том, чтобы упростить понимание ваших программ.

Поэтому следующая программа STR_OVER.CPP немного изменяет предыдущую программу, чтобы позволить ей выполнять операции над переменными типа string, используя синтаксис, который более согласуется со стандартными операторами присваивания:

#include <iostream.h>

#include <string.h>

class string

{

public:

string(char *); // Конструктор

char * operator +(char *) ;

char * operator -(char);

void show_string(void);

private:

char data[256] ;

} ;

string::string(char *str)

{

strcpy(data, str);

}

char * string::operator +(char *str)

{

return(strcat(data, str));

}

 

char * string::operator -(char letter)

{

char temp[256];

int i, j;

for (i = 0, j = 0; data[i]; i++) if (data[i] 1= letter) temp[j++] = data[i];

temp[j] = NULL;

return(strcpy(data, temp));

}

void string::show_string(void)

{

cout << data << endl;

}

void main(void)

{

string title("Учимся программировать на C++");

string lesson("Перегрузка операторов");

title.show_string();

title = title + " я учусь";

title.show_string() ;

lesson.show_string();

lesson = lesson - '?';

lesson.show_string();

}

Изменив перегруженные операторы плюс и минус таким образом, чтобы они возвращали указатель на символьную строку, программа может теперь использовать эти операторы в привычном для оператора присваивания виде:

 

title = title + " учимся программировать!";

 

lesson = lesson - 'р';

Второй пример

При создании ваших собственных типов данных с помощью классов наиболее общей операцией будет проверка, являются ли два объекта одинаковыми. Используя перегрузку, ваши программы могут перегрузить операторы равенства (=), неравенства (!=) или другие операторы сравнения. Следующая программа COMP_STR.CPP добавляет новый оператор в класс string, который проверяет, равны ли два объекта string. Используя перегрузку операторов, ваши программы могут проверять, содержат ли строковые объекты одинаковые строки, как показано ниже:

if (some_string == another_string)

Ниже приведена реализация программы COMP_STR.CPP:

 

#include <iostream.h>

#include <string.h>

class string

{

public:

string(char *); // конструктор

char * operator +(char *);

char * operator -(char);

int operator =(string);

void show_string(void);

private:

char data[256];

};

string::string(char *str)

{

strcpy(data, str);

}

char * string::operator +(char *str)

{

return(strcat(data, str));

}

char * string::operator -(char letter)

{

char temp[256];

int i, j;

for (i = 0, j = 0; data[i]; i++) if (data[i] 1= letter) temp[j++] = data[i];

temp[j] = NULL;

return(strcpy(data, temp));

}

int string::operator = = (string str)

{

int i;

for (i = 0; data[i] = str.data[i]; i++)

if ((data[i] = =NULL) && (str.data[i] = =NULL)) return(1); // Равно

return (0); //He равно

}

void string::show_string(void)

{

cout << data << endl;

}

void main(void)

{

string title( "Учимся программировать на C++");

string lesson("Перегрузка операторов");

string str( "Учимся программировать на C++");

if (title = lesson) cout << "title и lesson равны" << endl;

if (str = lesson) cout << "str и lesson равны" << endl;

if (title = str) cout << "title и str равны" << endl;

}

Как видите, перегружая операторы подобным образом, вы упрощаете понимание ваших программ.



<== предыдущая лекция | следующая лекция ==>
Перегрузка оператора состоит в изменении смысла оператора. | Статические элементы класса


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


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

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

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


 


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

 
 

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

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