
- •Часть 2
- •Часть 2
- •Лабораторная работа №1 Тема: “Простейшие классы”
- •Основные понятия
- •Пример 1: Класс, описывающий окружность.
- •Пример 2: Класс, описывающий точку.
- •Пример 3: Класс, описывающий двумерный массив.
- •Задания для самостоятельного выполнения
- •Лабораторная работа №2 Тема: “Конструкторы и деструкторы”
- •Пример 1: Класс, описывающий животное.
- •Пример 2: Класс, описывающий время.
- •Пример 3: Класс, описывающий двумерный массив.
- •Задания для самостоятельного выполнения
- •Лабораторная работа №3 Тема: “Перегрузка операций”
- •Пример 1: Класс, описывающий окружность.
- •Пример 2: Класс, описывающий прямоугольник.
- •Пример 3: Класс, описывающий строку символов
- •Задания для самостоятельного выполнения
- •Лабораторная работа №4 Тема: “Классы динамических структур” Пример 1: Класс, описывающий двунаправленный список
- •Пример 2: Класс, описывающий бинарное дерево
- •Задания для самостоятельного выполнения
- •Лабораторная работа №5 Тема: “Шаблонные классы”
- •Пример : Класс, описывающий множество.
- •Задания для самостоятельного выполнения
- •Лабораторная работа №6 Тема: “Наследование”
- •Пример 1: Классы, описывающие точку, окружность и конус.
- •Задания для самостоятельного выполнения
- •Лабораторная работа №7 Тема: “Полиморфизм и виртуальные функции”
- •Пример : Классы, описывающие точки и окружности.
- •Задания для самостоятельного выполнения
- •Лабораторная работа №8 Тема: “Разреженные массивы” Пример: Класс, описывающий разреженный массив
- •Задания для самостоятельного выполнения
- •Лабораторная работа №9 Тема: “Виртуальные функции в динамических структурах” Пример: Класс, описывающий базовый класс списка и производный класс стека
- •Задания для самостоятельного выполнения
- •Лабораторная работа №10 Тема: “Вычисление выражений, вводимых с клавиатуры”
- •Пример: Шаблонный класс для вычисления значения выражения, вводимого с клавиатуры
- •Пошаговое выполнение программы
- •Задание для самостоятельного выполнения
Пример 1: Класс, описывающий окружность.
#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
class Circle
{
//Закрытые элементы данных:
float x,y,r;
//Открытые функции (методы):
public:
//Фукции, обеспечивающие доступ к элементам данных:
void Set_x(float xx) {x=xx;}
void Set_y(float yy) {y=yy;}
void Set_r(float rr) {r=rr;}
float Get_x() {return x;}
float Get_y() {return y;}
float Get_r() {return r;}
//Функции ввода-вывода:
void input();
void output();
};
// Определение функций:
void Circle::input()
{
cout << "Задайте x: " << endl;
cin >> x;
cout << "Задайте y: " << endl;
cin >> y;
do
{
cout << "Задайте r > 0: " << endl;
cin >> r;
} while( r < 0 );
}
void Circle::output()
{
cout << "Значение x: " << x << endl;
cout << "Значение y: " << y << endl;
cout << "Значение r: " << r << endl;
}
// Пример объектно-ориентированного программирования:
int main()
{
//Настройки шрифтов и региональных стандартов:
if(SetConsoleCP(1251)==0)
//проверка правильности установки кодировки символов для ввода
{
cerr<<"Fialed to set codepage!"<<endl;
/* если не удалось установить кодовую страницу, вывод сообщения об ошибке*/
}
if(SetConsoleOutputCP(1251)==0)//тоже самое для вывода
{
cerr<<"Failed to set OUTPUT page!"<<endl;
}
Circle a;
a.input();
a.output();
float xx, yy, rr;
cout << "Задайте новое значение x: " << endl;
cin >> xx;
cout << "Задайте новое значение y: " << endl;
cin >> yy;
cout << "Задайте новое значение r: " << endl;
cin >> rr;
a.Set_x(xx);
a.Set_y(yy);
a.Set_r(rr);
cout << "Значение x = " << a.Get_x() << endl;
cout << "Значение y = " << a.Get_y() << endl;
cout << "Значение r = " << a.Get_r() << endl;
a.output();
_getch();
return 0;
}
Пример 2: Класс, описывающий точку.
#include <iostream>
#include <conio.h>
#include <windows.h>
#define _USE_MATH_DEFINES
#include <math.h>
using namespace std;
class CPoint
{
double x, y; //Закрытые элементы данных
public:
// Функции, обеспечивающие доступ:
double GetX(){return x;}
double GetY(){return y;}
void SetX(double _x){x = _x;}
void SetY(double _y){y = _y;}
// Функции ввода-вывода:
void Input();
void Output();
/* Функция, вычисляющая длину отрезка между двумя точками:
первой точкой будет та, к которой применяется эта функция, а второй – та, которая передается как параметр функции (точка p). Обратите внимание, как происходит обращение к координатам той и другой точки. */
double Len(CPoint p)
{
return sqrt(pow(x-p.x, 2)+pow(y-p.y, 2));
};
}; // Описание класса закончено
/* Объявление функции, вычисляющей периметр треугольника: координаты вершин будут храниться в массиве, указатель на который передается как параметр функции. */
double Perimeter(CPoint*);
// Пример главной программы:
int main()
{
//Настройки шрифтов и региональных стандартов:
if(SetConsoleCP(1251)==0)
//проверка правильности установки кодировки символов для ввода
{
cerr<<"Fialed to set codepage!"<<endl;
/* если не удалось установить кодовую страницу, вывод сообщения об ошибке */
}
if(SetConsoleOutputCP(1251)==0)//тоже самое для вывода
{
cerr<<"Failed to set OUTPUT page!"<<endl;
}
CPoint p[3]; // массив точек
// Считываем координаты вершин треугольника:
for (int i=0; i<3; i++)
{
p[i].Input();
}
cout << "Периметр треугольника = " << Perimeter(p) << endl;
//Сдвигаем первую точку на 1 по X и на 2 по Y:
p[0].SetX(p[0].GetX()+1);
p[0].SetY(p[0].GetY()+2);
cout << "Периметр нового треугольника = " << Perimeter(p) << endl;
_getch();
return 0;
}
// Определение функций:
// Определение функции, вычисляющей периметр треугольника:
double Perimeter(CPoint* p)
// Эта функция не является членом класса
{
int len = 0;
// Складываем длины сторон треугольника:
for (int i = 0; i < 3; i++)
{
/* Обратите внимание на то, как обеспечивается то, что номер точки должен быть от 0 до 2: */
len+=p[i].Len(p[(i+1) % 3]);
}
return len;
}
// Функция для ввода данных:
void CPoint::Input()
{
static int i=1; /* Статическая переменная, которая позволит нам нумеровать считываемые точки */
cout<<"Задайте координаты "<< i++ << " точки ";
cin >> x >> y;
}
// Функция для вывода данных:
void CPoint::Output()
{
static int i=1;
cout << "Координаты " << i << " точки: " <<
x << y << endl;
}