Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
билеты_все.docx
Скачиваний:
3
Добавлен:
01.03.2025
Размер:
121.92 Кб
Скачать

Билет 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>

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]