МегаПредмет

ПОЗНАВАТЕЛЬНОЕ

Сила воли ведет к действию, а позитивные действия формируют позитивное отношение


Как определить диапазон голоса - ваш вокал


Игровые автоматы с быстрым выводом


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


Целительная привычка


Как самому избавиться от обидчивости


Противоречивые взгляды на качества, присущие мужчинам


Тренинг уверенности в себе


Вкуснейший "Салат из свеклы с чесноком"


Натюрморт и его изобразительные возможности


Применение, как принимать мумие? Мумие для волос, лица, при переломах, при кровотечении и т.д.


Как научиться брать на себя ответственность


Зачем нужны границы в отношениях с детьми?


Световозвращающие элементы на детской одежде


Как победить свой возраст? Восемь уникальных способов, которые помогут достичь долголетия


Как слышать голос Бога


Классификация ожирения по ИМТ (ВОЗ)


Глава 3. Завет мужчины с женщиной


Оси и плоскости тела человека


Оси и плоскости тела человека - Тело человека состоит из определенных топографических частей и участков, в которых расположены органы, мышцы, сосуды, нервы и т.д.


Отёска стен и прирубка косяков Отёска стен и прирубка косяков - Когда на доме не достаёт окон и дверей, красивое высокое крыльцо ещё только в воображении, приходится подниматься с улицы в дом по трапу.


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

Перегрузка операций «поместить в поток» и «взять из потока»





С++ способен вводить и выводить стандартные типы данных, используя операции «поместить в поток» >> и операцию «взять из потока» <<. Эти операции уже перегружены в библиотеках классов, которыми снабжены компиляторы С++, чтобы обрабатывать каждый стандартный тип данных, включая строки и адреса памяти. Операции «поместить в поток» и «взять из потока» можно также перегрузить для того, чтобы выполнять ввод и вывод типов, определенных пользователем.

Необходимо обратить внимание, что ни функция вывода, ни функция ввода не могут быть членами класса. Это связано с тем, что, если операторная функция является членом класса, левый операнд (неявно передаваемый с помощью указателя this) должен быть объектом класса, который сгенерировал обращение к этой операторной функции. И это изменить нельзя. Однако при перегрузке операторов вывода левый операнд должен быть потоком, а правый – объектом класса, данные которого подлежат выводу (например: cin >> phone). Следовательно, перегруженные операторы вывода не могут быть функциями-членами класса. В связи с этим операторные функции ввода и вывода делают «друзьями» класса. Если функция является «другом» класса, она получает легальный доступ к его private-данным.

Чтобы объявить функцию, дружественную данному классу, необходимо включить ее прототип в объявления класса и предварить его ключевым словом friend. Спецификаторы доступа к элементам private, protected и public не имеют отношения к объявлению дружественности, так что объявления дружественных функций могут помещаться в любом месте описания класса.

Следующая программа демонстрирует перегрузку операций «поместить в поток» и «взять из потока» для обработки данных класса телефонных номеров PhoneNumber. В этой программе предполагается, что номера вводятся правильно в виде: 4952 12-34-56 (то есть вначале четырехзначный код области, а затем шестизначный городской номер с дефисами между парами цифр).

//Перегрузка операторов << и >>

#include <iostream>

#include <conio.h>

using namespace std;

 

class PhoneNumber

{friend ostream & operator << (ostream &, const PhoneNumber &);

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

private:

char areaCode[5]; //четырехцифровой код области и нулевой символ

char cityNumber[9]; //восьмицифровой городской номер

//в виде 12-34-56 и нулевой символ

};

 

//Перегруженная операция поместить в поток

ostream & operator << (ostream &output, const PhoneNumber &num)

{output << num.areaCode << " " << num.cityNumber;

return output; // разрешает cout << a << b << c;

}

 

//Перегруженная операция взять из потока

istream & operator >> (istream &input, PhoneNumber &num)

{ input >> num.areaCode;

input >> num.cityNumber;

return input; // разрешает cin >> a >> b >> c;

}

 

int main()

{setlocale(LC_ALL, "Russian");

PhoneNumber phone; // создание объекта phone

cout << "Введите номер телефона в виде 4321 12-34-56:\n";

cin >> phone; // вызвается функция operator>>

// путем вызова operator>> (cin, phone).

cout << "\nБыл введен номер телефона: \n";

cout << phone; // вызвается функция operator<<

// путем вызова operator<< (cout, phone).

getch();

return 0; }

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

Таким образом, функции ввода и вывода не должны быть членами класса, для обработки данных которого они предназначены. Они могут быть «друзьями» класса или просто независимыми функциями.

 

Порядок выполнения работы

В данной работе необходимо разработать и отладить объектно-ориентированную программу на языке С++ в интегрированной среде разработки приложений MS Visual Studio .NET 2005 в соответствии с заданием преподавателя. Для этого надо вначале создать h-файл с объявлением и определением класса, а затем разработать основную программу (cpp-файл с функцией main), в которой используется созданный класс.



 

Варианты заданий

1. Написать тексты h-файлов и cpp-файлов для класса Rect (прямоугольник). Описание класса:

Класс Элементы данных Интерфейс
Rect x, y, dx, dy Конструкторы, функции square, move, операции: =, += (увеличить высоту и ширину), !(отразить прямоугольник относительно оси х), <<, >>

Разработать и отладить программу с примерами создания и использования объектов класса Rect.

2. Разработать класс CDate:

Класс Элементы данных Интерфейс
CDate d (день), m (месяц), y (год) Конструкторы, методы SetDate, операции =, + (прибавляет к дате некоторое количество дней), - (возвращает разность дат в днях), ++ (перевести дату на 1 день вперед), <, >, <<, >>.

Написать тексты h-файла и cpp-файла для класса CDate. Разработать и отладить программу создания и использования объектов класса.

3.Написать тексты h-файлов и cpp-файлов для класса Rect (прямоугольник). Описание класса:

Класс Элементы данных Интерфейс
Rect x1, y1, dx, dy Конструкторы, функции move, resize, операции =, && (пересечение прямоугольников), || (получение наименьшего прямоугольника, содержащего два заданных прямоугольника), !(возвращает площадь прямоугольника) , <<, >>

Разработать и отладить программу с примерами создания и использования объектов класса Rect.

4.Написать тексты h-файлов и cpp-файлов для класса Circle. Описание класса:

Класс Элементы данных Интерфейс
Circle x, y, R Конструкторы, функции move, square, операции =, <, >, + (увеличение радиуса) , <<, >>

Разработать и отладить программу с примерами создания и использования объектов класса Rect.

5.Написать тексты h-файлов и cpp-файлов для класса Rect (прямоугольник). Описание класса:

Класс Элементы данных Интерфейс
Rect x1, y1, x2, y2 Конструкторы, функции move, операции: =, == (равно), != (не равно), !(возвращает периметр прямоугольника) , <<, >>

Разработать и отладить программу с примерами создания и использования объектов класса Rect.

6.Написать тексты h-файлов и cpp-файлов для класса Treugolnik (треугольник). Описание класса:

Класс Элементы данных Интерфейс
Treugolnik x1, y1, x2, y2, x3, y3 Конструкторы, функции move, square, операции =, <, > (сравнение площади), !(отразить треугольник относительно оси y) , <<, >>

Разработать и отладить программу с примерами создания и использования объектов класса Treugolnik.

7. Разработать класс Fraction (Дробь):

Класс Элементы данных Интерфейс
Fraction a (числитель), b (знаменатель) Конструкторы, операции =, +, -, ==, !=, ! (проверить конечность дроби, возвращает true/false) , <<, >>.

Написать тексты h-файла и cpp-файла для класса Fraction. Разработать и отладить программу создания и использования объектов класса.

8. Разработать класс Complex:

Класс Элементы данных Интерфейс
Complex x, y Конструкторы, операции =, +, -, ==, !=, *, -(унарный минус, что соответствует умножению на -1) , <<, >>.

Написать тексты h-файла и cpp-файла для класса Complex. Разработать и отладить программу создания и использования объектов класса.

9. Разработать класс CLine (Прямая, заданная общим уравнением вида Ax+By+C=0)

Класс Элементы данных Интерфейс
CLine A, B, C Конструкторы, операции =, ! (возвращает true, если прямые пересекаются, иначе - false), * (определяет точку пересечения двух прямых), ^ (возвращает угол наклона прямой к оси Х), ==, !=, <<, >>.

Написать тексты h-файла и cpp-файла для класса CLine. Разработать и отладить программу создания и использования объектов класса.

10. Разработать класс Fraction (Дробь):

Класс Элементы данных Интерфейс
Fraction p (числитель), q (знаменатель) Конструкторы, операции =, +, -, <, >, ! (Период дроби (результат – тип Long)) , <<, >>.

Написать тексты h-файла и cpp-файла для класса Fraction. Разработать и отладить программу создания и использования объектов класса.

11. Разработать класс Line (Прямая, заданная уравнением вида y=kx+b)

Класс Элементы данных Интерфейс
Line k, b Конструкторы, метод distance(x,y) – определяет расстояние от заданной точки до прямой, операции =, ! (возвращает true, если прямые параллельны, иначе - false), * (определяет точку пересечения двух прямых), ==, !=, <<, >>.

Написать тексты h-файла и cpp-файла для класса Line. Разработать и отладить программу создания и использования объектов класса.

12. Разработать класс Drob (Дробь):

Класс Элементы данных Интерфейс
Drob p (числитель), q (знаменатель) Конструкторы, операции =, +=, -=, <=, >=, ! (возвращает период дроби) , <<, >>.

Написать тексты h-файла и cpp-файла для класса Drob. Разработать и отладить программу создания и использования объектов класса.

13. Разработать класс CTime:

Класс Элементы данных Интерфейс
CTime h (часы), m (минуты), s (секунды) Конструкторы, методы SetTime, операции =, + (прибавляет некоторое количество минут), - (возвращает разность времени в секундах), ++ (перевести время на 1 секунду вперед), <, >, <<, >>.

Написать тексты h-файла и cpp-файла для класса CTime. Разработать и отладить программу создания и использования объектов класса.





©2015 www.megapredmet.ru Все права принадлежат авторам размещенных материалов.