Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЯВУ ООП.doc
Скачиваний:
12
Добавлен:
11.08.2019
Размер:
486.91 Кб
Скачать

Текст программы

#include <iostream.h>

#include <conio.h>

#include <math.h>

#include <string.h>

class Fun

{

double x,y,z;

char *point;

unsigned size;

public:

//конструктор с параметрами

Fun (unsigned s,char *c,double X=0,double Y=0,double Z=0);

//конструктор по умолчанию

Fun ();

//перегрузка оператора =

Fun& operator = (Fun const &);

//конструктор для копирования

Fun (Fun const &);

//деструктор

~Fun()

{

cout<<"Destroed object..."<<endl;

}

//переустановка элеиентов

void set (unsigned s,char *c,double X,double Y,double Z);

//ф-ия печати

void print();

double funy(double x,double y,double z);

};

//описание конструктора с параметрами

Fun::Fun (unsigned s,char *c,double X,double Y,double Z)

{

cout<<"Constructor1...."<<endl;

point = new char[(size = s)+1];

strcpy(point,c);

x=X;

y=Y;

z=Z;

};

//описание конструктора по умолчанию

Fun::Fun ()

{

cout<<"Constructor2...."<<endl;

point=" then Function =";

x=0.4E4;

y=-0.875;

z=-0.475E-3;

};

//описание оператора "="

Fun& Fun::operator = (Fun const & a)

{

if (this !=&a) //проверка, не указывает ли указатель сам на себя

{

cout<<"Operator="<<endl;

delete [] point; //освобождение старой памяти

point=new char[size=a.size]; //выделение новой памяти

x=a.x;

y=a.y;

z=a.z;

}

return *this;

};

//описание конструктора для копирования

Fun::Fun(Fun const & a)

{

cout<<"Constructor for copy..."<<endl;

point = new char[(size=a.size)+1];

strcpy(point,a.point);

x=a.x;

y=a.y;

z=a.z;

};

//описание функции print

void Fun::print()

{

cout<<"x = "<<x<<" y = "<<y<<" z = "<<z<<" "<<point<<funy(x,y,z)<<endl;

};

//описание функции переустановки элементов

void Fun::set (unsigned s,char *c,double X,double Y,double Z)

{

cout<<"Set...."<<endl;

delete[] point;

point=new char[(size=s)+1];

strcpy (point,c);

x=X;

y=Y;

z=Z;

};

double Fun::funy(double x,double y,double z)

{

return(

pow (abs(cos(x)-cos(y)) , 1+2*pow(sin(y),2)) * (1+z+pow(z,2)/2+pow(z,3)/3+pow(z,4)/4)

);

};

void main()

{

Fun Fun1(13,"Function1 = ",1.0,1.0,1.0);

Fun1.print();

getch();

Fun1.set(13,"Function1 = ",1.1,1.3,3.2);

Fun1.print();

getch();

Fun Fun2=Fun(13,"Function2 = ",1.0,2.3,4.0);

Fun2.print();

Fun2=Fun1;

Fun2.print();

getch();

Fun Fun3;

Fun3.print();

getch();

}

Таблица вариантов

Задание

составить решения линейных алгоритмов с применением классов:

- Конструктора

- Деструктора

  • Конструктора по умолчанию

  • Конструктора для копирования

  • Функции инициализации (переустановки значений) set()

  • Функции вычисления заданного выражения run()

  • Вывода результатов print()

- Функции перезагрузки оператора «=»

1

Для выражения

при x=14,26, y=-1,22, z=3,5*10-2 .

2

Для выражения

при x=-4,5, y=0,75*10-4, z=0,845*102 .

3

Для выражения

при x=3,74*10-2, y=-0,825, z=0,16*10-2 .

4

Для выражения

при x=-15,246, y=4,642*10-2, z=20,001*102 .

5

Для выражения

при x=16,55*10-3, y=-2,75, z=0,15.

6

Для выражения

при x=0,1722, y=6,33, z=3,25*10-4 .

7

Для выражения

при x=-2,235*10-2, y=2,23, z=15,221.

8

Для выражения

при x=1,825*102, y=18,225, z=-3,298*10-2 .

9

Для выражения

при x=3,251, y=0,325, z=0,466*10-4 .

10

Для выражения

при x=17,421, y=10,365*10-3, z=0,828*105.

11

Для выражения

при x=12,3*10-1, y=15,4, z=0,252*103.

12

Для выражения

при x=2,444, y=0,869*10-2, z=-0,13*103 .

Лабораторная работа №2

Объекты

Объект представляет собой конкретную переменную типа класс:

имя_класса имя_объекта(параметры_инициализации);

Если необходимо использовать параметры по умолчанию, то при объявлении объекта список параметров не указывается, не пишутся также скобки:

имя_класса имя_объекта;

Т.о. объекты описываются так же как и обычные переменные. Доступ к элементам объекта осуществляется следующим образом:

имя_объекта.имя_элемента

имя_объекта->имя_элемента //Объект описан

//через указатель

Пример

Разработайте класс Triangle_Prism (прямая призма, в основании – треугольник), который должен содержать закрытые переменные: a, b – стороны треугольника-основания, А – угол между этими сторонами, Н – высота призмы.

Разработанный класс должен содержать метод set_Init() инициализации указанных переменных, а также методы, вычисляющие и возвращающие значения площадей основания get_So(), боковой get_Sb() и полной get_Sp() поверхностей по формулам:

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

Графическая реализация программы

Класс Triangle_Prizm

Функция void main()

Текст программы

#include <iomanip.h>

#include <math.h>

#include <iostream.h>

#include <string.h>

class Triangle_Prism

{

private:

double a,b,A,H;

public:

double So,Sb,Sp;

void get_So();

void get_Sb();

void get_Sp();

void set_Init();

void print();

};

void Triangle_Prism::set_Init()

{

cout<<"Vvedite znachenie storoni osnovaniya a \n";cin>>a;

cout<<"Vvedite znachenie storoni osnovaniya b \n";cin>>b;

cout<<"Vvedite znachenie ugla megdu storonami A \n";cin>>A;

cout<<"Vvedite znachenie visoti prizmi H \n";cin>>H;

}

void Triangle_Prism::get_So()

{

So=a*b*sin(A/2);

}

void Triangle_Prism::get_Sb()

{

Sb=(a+b+((a*a)+(b*b)-2*a*b*cos(A))*exp(1/2))*H;

}

void Triangle_Prism::get_Sp()

{

Sp=2*So+Sb;

}

void Triangle_Prism::print()

{

cout<<So<<" - ploschad osnovaniya \n";

cout<<Sb<<" - ploschad bokovoy poverhnosti \n";

cout<<Sp<<" - ploschad polnoy poverhnosti \n";

}

main()

{

char q;

Triangle_Prism ob1;

ob1.set_Init(); //Ввод

ob1.get_So();

ob1.get_Sb();

ob1.get_Sp();

ob1.print(); //Вывод

Triangle_Prism ob2;

Triangle_Prism* pob2=&ob2;

pob2->set_Init();

pob2->get_So();

pob2->get_Sb();

pob2->get_Sp();

pob2->print();

cin>>q;

return 0;

}

Таблица вариантов

Задание

1

Разработайте класс Cube (куб), который должен содержать закрытую (private) переменную: – ребро куба

Разработанный класс должен содержать метод set_Init() инициализации указанных переменных, а также методы, вычисляющие и возвращающие значения площадей основания get_So(), боковой get_Sb() и полной get_Sp() поверхностей по формулам:

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

2

Разработайте класс Rectang_Parallel (прямоугольный параллелепипед), который должен содержать закрытые переменные: ,b – стороны прямоугольника-основания, H – высота параллелепипеда.

Разработанный класс должен содержать метод set_Init() инициализации указанных переменных, а также методы, вычисляющие и возвращающие значения площадей основания get_So(), боковой get_Sb() и полной get_Sp() поверхностей по формулам:

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

3

Разработайте класс Prizm_Rectilineal_Triangular (прямая призма, в основании – правильный треугольник, вписанный в окружность), который должен содержать закрытые переменные: R – радиус описанной окружности (R = /2*sin 60o, где - сторона правильного треугольника), H – высота призмы.

Разработанный класс должен содержать метод set_Init() инициализации указанных переменных, а также методы, вычисляющие и возвращающие значения площадей основания get_So(), боковой get_Sb() и полной get_Sp() поверхностей по формулам:

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

4

Разработайте класс Trapezium_Prism (прямая призма, в основании – равнобедренная трапеция), который должен содержать закрытые переменные: , b - параллельные стороны, h – высота трапеции-основания, H – высота призмы.

Разработанный класс должен содержать метод set_Init() инициализации указанных переменных, а также методы, вычисляющие и возвращающие значения площадей основания get_So(), боковой get_Sb() и полной get_Sp() поверхностей по формулам:

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

5

Разработайте класс Tetrahedron(правильный тетраэдр, т.е. треугольная пирамида, грани – равносторонние треугольники), который должен содержать закрытую переменную: - ребро правильного тетраэдра.

Разработанный класс должен содержать метод set_Init() инициализации указанных переменных, а также методы, вычисляющие и возвращающие значения площадей основания get_So(), боковой get_Sb() и полной get_Sp() поверхностей по формулам:

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

6

Разработайте класс Cone(прямой конус, в основании – круг), который должен содержать закрытые переменные: r – радиус круга-основания, H – высота конуса.

Разработанный класс должен содержать метод set_Init() инициализации указанных переменных, а также методы, вычисляющие и возвращающие значения площадей основания get_So(), боковой get_Sb() и полной get_Sp() поверхностей по формулам:

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

7

Разработайте класс Cylinder(прямой цилиндр, в основании – круг), который должен содержать закрытые (private) переменные: r – радиус круга-основания, H – высота цилиндра.

Разработанный класс должен содержать метод set_Init() инициализации указанных переменных, а также методы, вычисляющие и возвращающие значения площадей основания get_So(), боковой get_Sb() и полной get_Sp() поверхностей по формулам:

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

8

Разработайте класс Truncated_Cone(усеченный конус, в основаниях - круги), который должен содержать закрытые переменные: r, R – радиусы кругов-оснований, L – образующая усеченного конуса, H – высота усеченного конуса.

Разработанный класс должен содержать метод set_Init() инициализации указанных переменных, а также методы, вычисляющие и возвращающие значения площадей основания get_So1() и get_So2(), боковой get_Sb() и полной get_Sp() поверхностей по формулам:

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

9

Разработайте класс Hexagonal_Prism(прямая призма, в основании – правильный шестиугольник, вписанный в окружность), который должен содержать закрытые переменные: R – радиус описанной окружности, H – высота усеченного конуса.

Разработанный класс должен содержать метод set_Init() инициализации указанных переменных, а также методы, вычисляющие и возвращающие значения площадей основания get_So1() и get_So2(), боковой get_Sb() и полной get_Sp() поверхностей по формулам:

(так как сторона правильного шестиугольника ввввввввввввввввввввввввввввравна радиусу описанной окружности)

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

Р азработайте класс Prism_Inscribed_Triangular(прямая призма, в основании – треугольник, вписанный в окружность), который должен содержать закрытые переменные: ,b,с – стороны треугольника, R – радиус описанной окружности, H – высота призмы.

Разработанный класс должен содержать метод set_Init() инициализации указанных переменных, а также методы, вычисляющие и возвращающие значения площадей основания get_So1() и get_So2(), боковой get_Sb() и полной get_Sp() поверхностей по формулам:

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

11

Р азработайте класс Prism_Attached_Rectilineal_Triangular(прямая призма, в основании – правильный треугольник, в который вписана окружность), который должен содержать закрытые переменные: r – радиус вписанной окружности (r= /2 tg60o, где - сторона правильного треугольника), H – высота призмы.

Разработанный класс должен содержать метод set_Init() инициализации указанных переменных, а также методы, вычисляющие и возвращающие значения площадей основания get_So1() и get_So2(), боковой get_Sb() и полной get_Sp() поверхностей по формулам:

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

12

Р азработайте класс Rhombus_Parallel(прямой параллелепипед, в основании - ромб), который должен содержать закрытые переменные: - сторона ромба-основания, A-угол между сторонами ромба, H – высота параллелепипеда.

Разработанный класс должен содержать метод set_Init() инициализации указанных переменных, а также методы, вычисляющие и возвращающие значения площадей основания get_So1() и get_So2(), боковой get_Sb() и полной get_Sp() поверхностей по формулам:

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

Лабораторная работа №3

Конструкторы и деструкторы

Конструкторы и деструкторы – это особенные методы класса. Конструктор служит для инициализации объектов данного класса. Он вызывается автоматически при создании объекта. Деструктор освобождает помять, которая была выделена под объект. Деструктор вызывается автоматически при выходе объекта из области действия.

Основные свойства конструкторов:

  • Имя конструктора всегда совпадает с названием класса.

  • Конструктор не возвращает значение, даже типа void.

  • Класс может иметь несколько конструкторов, для этого используется механизм перегрузки.

  • Конструктор, вызываемый без параметров, называется конструктором по умолчанию.

  • Если ни один конструктор не указан, то компилятор создает его автоматически. Такой конструктор присваивает всем полям объекта нулевые значения.

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

Деструктор также как и конструктор не возвращает никакого значения. Деструктор не имеет аргументов, его имя совпадает с именем класса, но перед ним ставится тильда (~). Пример описания деструктора:

~имя_класса(){delete [] name;}

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

Пример

Изменить программу предыдущего задания так, чтобы инициализация объекта производилась с помощью конструктора с параметрами. Ввести еще одну закрытую переменную класса для хранения имени объекта (посредством оператора new) и его инициализацию провести в конструкторе, освобождение выделенной памяти (посредством оператора delete) – в деструкторе. создать несколько объектов разработанного класса, вывести значения площадей их оснований, боковой и полной поверхностей.

Графическая реализация программы

Класс Triangle_Prizm

Функция main ( )

Текст программы

#include <iostream.h>

#include <conio.h>

#include <iomanip.h>

#include <math.h>

class Triangle_Prizm1

{

double a,b,h,alfa;

unsigned size;

public:

char* point;

double So,Sb,Sp;

Triangle_Prizm1 (unsigned s,char *c,double A,double B,double H,double ALFA);

~Triangle_Prizm1()

{

delete point;

}

void get_So();

void get_Sb();

void get_Sp();

void print();

};

Triangle_Prizm1::Triangle_Prizm1 (unsigned s,char *c,double A,double B,double H,double ALFA)

{

point = new char[(size=s)+1];

strcpy(point, c);

a=A;

b=B;

h=H;

alfa=ALFA;

};

void Triangle_Prizm1::get_So()

{

So=a*b*sin(alfa/2);

};

void Triangle_Prizm1::get_Sb()

{

Sb=((a+b)+pow(a*a+b*b-2*a*b*cos(alfa),1/2))*h;

};

void Triangle_Prizm1::get_Sp()

{

Sp=2*So+Sb;

};

void Triangle_Prizm1::print()

{cout<<point<<":"<<endl;

cout<<"ploshad osnovaniya - "<<So<<endl;

cout<<"ploshad bokovoy poverhnosti - "<<Sb<<endl;

cout<<"ploshad polnoy poverhmosti - "<<Sp<<endl;

}

void main()

{ Triangle_Prizm1 tr(13,"treugolnik",21,23,12,30);

tr.get_So();

tr.get_Sb();

tr.get_Sp();

tr.print();

Triangle_Prizm1 tr1(13,"treugolnik 2",10,10,34,30); //параметры

tr1.get_So();

tr1.get_Sb();

tr1.get_Sp();

tr1.print();

getch();

}

Задание

Изменить программу предыдущего задания так, чтобы инициализация объекта производилась с помощью конструктора с параметрами. Ввести еще одну закрытую переменную класса для хранения имени объекта (посредством оператора new) и его инициализацию провести в конструкторе, освобождение выделенной памяти (посредством оператора delete) – в деструкторе. создать несколько объектов разработанного класса, вывести значения площадей их оснований, боковой и полной поверхностей.

Лабораторная работа №4

Использование виртуальных функций

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

Пример

Создать программу с классом Bibliographer, который включает в себя следующие данные-элементы о библиографах, работающих в библиотеке:

- ФИО сотрудника библиотеки;

- Год рождения;

- Год поступления на работу;

- Категория (библиограф, старший библиограф, главный библиограф, заведующий отделом);

- Название отдела.

В класс входят следующие функции-члены класса:

- Конструктор с параметрами

- Деструктор

- Функция инициализации текущего состояния объектов

- Функция для просмотра текущего состояния объектов PRINT()

- Функция-друг, которая позволяет вывести ФИО старших библиографов отдела, название которого вводится с клавиатуры

- Виртуальная функция просмотра текущего объекта print().

Производный класс Bibliographer имеет следующие элементы:

- Количество выполняемых справок-заказов в день

- Количество выполняемых тематических справок в месяц

- Переопределенную функцию вывода всех данных о сотруднике библиотек.

Графическая реализация программы

Bibliographer_1 t("f i o",1987,2001,"bibliograph","glavnij",198,788);

Нет

Да

Класс Bibliographer

Bibliographer (char *fio,int god1,int god_post1,char *categoria1,char *otdel,int kol_d,int kol_m)

Класс Bibliographer_1