- •Билет 1. Билет 7
- •Билет 2. Билет 8.
- •Билет 3. Билет 9. Билет 23.
- •Билет 4. Билет 10. Билет 24
- •Билет 5. Билет 11. Билет 27
- •Билет 6. Билет 12. Билет 28
- •Билет 13! Билет 19. Билет 31. Html. Структура документа, физическое и логическое форматирование, оформление абзацев и списков
- •Билет 14. Билет 20. Билет 32. Html. Рисунки и гиперссылки
- •Билет 15. Билет 25. Html. Использование и оформление таблиц
- •Билет 16. Билет 26. Html. Разбиение окна на фреймы
- •Билет 17. Html. Оформление документов с использованием css
- •Билет 18. Html. Типы css
- •Билет 21. Билет 29.
- •Билет 22
- •Билет 30 Структуры в языке с
- •Билет 33 Библиотека qt. Создание приложений в qt Creator.
- •Билет № 34 Библиотека qt. Работа со строками.
- •Билет 35 Использование JavaScript при оформлении динамических html страниц
- •Билет 36 Использование объектной модели документа (dom) в Java Script
- •Иерархия классов dom
- •Билет 37 Формы и их использование в JavaScript
- •Билет № 38 Объектная модель браузера и ее использование в JavaScript
Билет 21. Билет 29.
Перегрузка операторов в С++
Перегрузка операторов — в программировании — один из способов реализации полиморфизма, заключающийся в возможности одновременного существования в одной области видимости нескольких различных вариантов применения оператора, имеющих одно и то же имя, но различающихся типами параметров, к которым они применяются.
Перегрузка операторов может упростить наиболее общие операции класса и улучшить читаемость программы.
Оператор в С++ - это некоторое действие или функция обозначенная специальным символом. Для того что бы распространять эти действия на новые типы данных, при этом сохраняя естественный синтаксис, в С++ была введена возможность перегрузки операторов.
Список операторов: + - * / % //Арифметические операторы += -= *= /= %= +a -a //Операторы знака ++a a++ --a a-- //Префиксный и постфиксный инкременты && || ! //Логические операторы & | ~ ^ &= |= ^= << >> <<= >>= //Битовый сдвиг = //Оператор присваивания == != //Операторы сравнения < > >= <=
|
Специальные операторы: &a *a a-> a->* () [] (type) . , (a ? b : c)
|
Не все операторы можно переопределять
Рассмотрим пример перегрузки операторов +, -, ++(префиксная форма), = при помощи операторных функций, включенных в пользовательский класс person.
Также выполним перегрузку операторов ввода/ вывода классов istream и ostream для упрощения формы записи ввода и вывода данных объекта класса person через объекты-потоки cin и cout.
// main.cpp // #include "person.h" #include <iostream>
int main() { person My1, My2("Nick",1989); std::cout << "Enter Name, Year ->"; //использование перегруженного оператора ввода std::cin >> My1; // использование перегруженного оператора вывода std::cout << My1; std::cout << My2; person My3; // использование перегруженного оператора присваивания My3=My1; std::cout << My3; // использование перегруженного оператора сложения person My4=My3+6; std::cout << My4; // использование перегруженного оператора вычитания int diff=My4-My2; std::cout << "Diff=" << diff << std::endl; std::cout << " Prefix: " << ++My2; return 0; } // person.h // #include <iostream>
class person { char Name[20]; int Year; public: person(void); ~person(void); person(char* N, int Y); //Перегрузка ввода через объект класса istream (cin) friend std::istream& operator>>(std::istream&,person&); //Перегрузка вывода через объект класса ostream (cout) friend std::ostream& operator<<(std::ostream&,person&); //Присваивание person& operator=(person&); //Сложение person operator+(int); //Вычитание - результат в виде целого числа int operator-(person&); //Префиксный инкремент person& operator++(); };
|
//person.cpp // #include ".\person.h" #include <string.h> //#include <iostream>
person::person(void) { } person::~person(void) { } person::person(char* N, int Y) { strcpy(Name, N); Year=Y; } std::istream& operator>>(std::istream& is,person& p) { char buf[20]; int Y; std::cout << "Name->"; is>>buf; strcpy(p.Name,buf); std::cout << "Year->"; is >> Y; p.Year = Y; return is; } std::ostream& operator<<(std::ostream& os,person& p) { os << "Name " << p.Name << " Year " << p.Year << std::endl; return os; } person& person::operator=(person& p) { if (this==&p) return *this; strcpy(Name, p.Name); Year=p.Year; return *this; } person person::operator+(int Y) { person Temp; Temp.Year= Year+Y; strcpy(Temp.Name,Name); return Temp; } int person::operator-(person& p) { int Temp; Temp=Year-p.Year; return Temp; } person& person::operator++() { Year++; return *this; }
|
Задание: НТМL. Вставить в один документ несколько картинок и сделать на них гиперссылки
<HTML>
<HEAD>
<TITLE>21 билет</TITLE>
</HEAD>
<BODY>
<a name=first><IMG src="1.jpg"></a>
<br>
<a name=second><IMG src="2.jpg"></a>
<br>
<a name=third><IMG src="3.jpg"></a>
<br>
<a href = #first>Ссылка на первую картинку</a>
<br>
<a href = #second>Ссылка на вторую картинку</a>
<br>
<a href = #third>Ссылка на третью картинку</a>
</BODY>
</HTML>
Задание: НТМL. . Вставить в 2 документа таблицы. В третьем сделать на них гиперссылки
1.htm <HTML> <HEAD> <TITLE>29 билет</TITLE> </HEAD> <BODY> <a name=table1><TABLE width=30% BORDER="1" CELLSPACING="0" CELLPADDING="100%"></a> <TR> <TD></TD> <TD></TD> </TR> <TR> <TD></TD> <TD></TD> </TR> </TABLE> <br> <br> <br> <br> <br> <br> <a name=table2><TABLE width=30% BORDER="1" CELLSPACING="0" CELLPADDING="100%"></a> <TR> <TD></TD> <TD></TD> <TD></TD> </TR> <TR> <TD></TD> <TD></TD> <TD></TD> </TR> </TABLE> </BODY> </HTML> |
2.htm <HTML> <HEAD> <TITLE>29 билет</TITLE> </HEAD> <BODY> <TABLE width=30% BORDER="1" CELLSPACING="0" CELLPADDING="100%"> <TR> <TD></TD> <TD></TD> </TR> <TR> <TD></TD> <TD></TD> </TR> </TABLE> </BODY> </HTML> |
3.htm <HTML> <HEAD> <TITLE>29 билет</TITLE> </HEAD> <BODY> <a href ="29-1.html#table1">Ссылка на документ №1 на первую таблицу</a> <br> <a href ="29-1.html#table2">Ссылка на документ №1 на вторую таблицу</a> <br> <a href ="29-2.html">Ссылка на документ №2</a> </BODY> </HTML> |
