Скачиваний:
29
Добавлен:
20.06.2014
Размер:
98.3 Кб
Скачать

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

«Концепция объектно-ориентированного программирования на СИ++»

Выполнил: Янковский Д.В.

гр. ПО-41

Коломна, 2011 г.

Цель:

Сформировать класс "Комплексные числа". Для этого объекта определить его представителей: векторы комплексных чисел и матрицы комплексных чисел. В качестве основных операций над комплексными числами определить основные операции формальной арифметики ( сложение, вычитание, умножение, деление).

Выполнение:

Создали новый пустой проект в Visual Studio 2008 (“Файл –> Создать –> Проект –> Пустой проект”).

Добавили в этот проект Файл С++ (“Файл –> Создать –> Файл –> Файл С++ ”).

В процессе выполнения трансляции исходного кода были устранены следующие ошибки:

  • void Minus ( Complex. Complex );

Вместо точки должна быть запятая.

  • void Mult ( Complex, Conplex );

Ошибка в написание класса Conplex вместо Complex .

  • Re = x.Re + y.Re; Im = x.Im + y.Im; …

Вместо латинской буквы «Y» использовалась русская буква «У».

  • void Complex: :Div ( Complex x, Complex y )

Не должно быть пробела между двумя двоеточиями.

  • cout << "…";

Необходимо подключить пространство имен std (using namespace std).

  • cout << "Введите мнимую часть числа: "

Не поставлена запятая в конце строки.

  • Complex a,b,c;

Вместо латинской буквы «C» использовалась русская буква «С».

  • setlocale(LC_ALL, "Russian");

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

  • Для просмотра вывода добавлена функция _getch() и директива #include <conio.h>

/*****************/

/* Description of */

/* class Complex */

// *****************/

/* V. 13.02.2010 */

#include <iostream> // для cin, cout

#include <process.h> // для exit()

#include <conio.h> // для просмотра результата

#include <locale.h> // для поддержки русских символов

using namespace std;

class Complex {

float Re; // Действительная и

float Im; // мнимая части числа

public:

void Sum ( Complex, Complex ); // Функции

void Minus ( Complex, Complex ); // арифметики

void Mult ( Complex, Complex ); //

void Div ( Complex, Complex ); //

void Get (); // Функции ввода

void Put (); // и вывода

};

void Complex :: Sum ( Complex x, Complex y ) // Сумма чисел

{

Re = x.Re + y.Re; Im = x.Im + y.Im;

}

void Complex :: Minus ( Complex x, Complex y ) // Разность

{

Re = x.Re - y.Re; Im = x.Im - y.Im;

}

void Complex :: Mult ( Complex x, Complex y ) //Произведение

{

Re = x. Re * y. Re - x.Im * y.Im; Im = x.Re * y.Im + x.Im * y.Re;

}

void Complex :: Div ( Complex x, Complex y ) // Деление

{

if ( !(y.Re || y.Im ) ) {

cout << "Деление на ноль!"; exit (12);

}

//Re = x.Re * y.Re - x.Im * y.Im; Im = x.Re * y.Im + x.Im * y.Re;

Re = (x.Re * y.Re + x.Im * y.Im)/(y.Re*y.Re + y.Im*y.Im); Im = (-x.Re * y.Im + x.Im * y.Re)/(y.Re*y.Re + y.Im*y.Im);

}

void Complex :: Get ( ) // Ввод с клавиатуры

{

cout <<"Введите действительную часть числа:";

cin >> Re;

cout << "Введите мнимую часть числа: ";

cin >> Im;

}

void Complex:: Put ( ) // Вывод на экран

{

cout << "Действительная часть числа: " << Re;

cout << "\nМнимая часть числа: " << Im;

}

// Программа проверки работоспособности класса

// комплексных чисел " Complex

void main()

{

setlocale(LC_ALL, "Russian");

Complex a,b,c; // Определение объектов a,b,c

a.Get(); b.Get();// Ввод чисел с клавиатуры

Complex a(1,0);

Complex b(0,1);

c.Sum ( a, b ); // Сумма а и b помещется в c

cout <<"Сумма:\n";

c.Put (); // Вывод результата на экран

c.Minus ( a, b ); // Вычитание а и b помещется в c

cout <<"\nВычитание:\n";

c.Put (); // Вывод результата на экран

c.Mult ( a, b ); // Умножение а и b помещется в c

cout <<"\nУмножение:\n";

c.Put (); // Вывод результата на экран

c.Div ( a, b ); // Деление а и b помещется в c

cout <<"\nДеление:\n";

c.Put (); // Вывод результата на экран

//c.Put (); // Вывод результата на экран

_getch();

}

Ответы на контрольные вопросы:

  1. Что такое класс в Си++ ?

Класс – производный тип данных, объединенный с множеством функций и операций, работающих с объектами этого типа, и сформированный при помощи описателей class, struct или union.

  1. В чем отличие объектов Си++ от классов Си++?

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

  1. Что такое ограничение доступа к элементам данных?

Ограничение доступа к данным вне класса.

4. В чем отличия ограничителей доступа private, public, protected?

private (закрытый, внутренний член класса) — обращения к члену допускаются только из методов того класса, в котором этот член определён. Любые наследники класса уже не смогут получить доступ к этому члену. Наследование по типу private запрещает доступ из дочернего класса ко всем членам родительского класса, включая даже public-члены (С++);

protected (защищённый, внутренний член иерархии классов) — обращения к члену допускаются из методов того класса, в котором этот член определён, а также из любых методов его классов-наследников. Наследование по типу protected делает все public-члены родительского класса protected-членами класса-наследника (С++);

public (открытый член класса) — обращения к члену допускаются из любого кода. Наследование по типу public не меняет модификаторов родительского класса (С++);

5. Что такое операция области видимости, в каких случаях она применяется, а в каких необязательна

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

6. Для чего используются встраиваемые функции, как они определяются?

Встраиваемая функция характерна тем, что компилятор Си++, обрабатывая вызовы этой функции в программе, заменяет их не на вызов функции как подпрограммы, а непосредственно на объектный код, соответствующий определению этой функции.

7. Каков общий синтаксис описания классов?

<описатель> имя_класса[: базовый список] {список_элементов}

В этом определении <описатель> - это один из описателей class, struct или union, имя_класса - идентификатор из латинских букв и цифр, начинающийся с буквы, в базовом списке перечисляются базовый класс или классы, свойства которых наследуются, а список_элементов объявляет элементы класса - элементы данных и функции (методы) класса.

8. Каковы главные отличия объектно-ориентированного языка программирования от необъектного?

В объектно-ориентированном главный элемент это класса и методы, а в необъектном это процедуры и функции.

9. Что такое полиморфизм?

Полиморфизм - это положение теории типов, согласно которому имена (переменных) могут обозначать объекты разных, но имеющих общего родителя, классов. Следовательно, любой объект, обозначаемый полимофным именем, может по-своему реагировать на некий общий набор операций. Один интерфейс — много методов.

10. Что такое инкапсуляция?

Инкапсуляция - ограничение прав доступа. Объекты в задаче сохраняют конкретные данные, тип которых определяется полями класса. Каждый объект в задаче играет роль, определяет его “поведение”. То, что может делать каждый объект (кроме сохранения значений своих полей) задается элементами функции. Особенностью класса является инкапсуляция одной конструкции, как данных, так и методов функций, которые обрабатывают эти данные, контролируемым образом. Это защита данных и операций от неконтролируемого доступа.

11. Как организуется доступ к элементам данных внутри одного класса ?

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

12. Возможен ли доступ к элементам данных одного класса из методов другого класса?

В зависимости от ограничителей доступа.

13. Могут ли функции-члены класса находится в защищенной части класса private?

Могут

14. Как используются функции-члены класса в программе на языке Си++?

Для доступа и изменения состояния объекта.

Вывод:

В данной лабораторной работе сформирован класс "Комплексные числа". Для этого объекта определенны его представители: векторы комплексных чисел и матрицы комплексных чисел. В качестве основных операций над комплексными числами определенны основные операции формальной арифметики ( сложение, вычитание, умножение, деление).

7

Соседние файлы в папке Отчеты