Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прогр_ЛР6.doc
Скачиваний:
6
Добавлен:
19.11.2019
Размер:
301.57 Кб
Скачать

Программирование. Лабораторная работа 6 14

Лабораторная работа 6. Построение графиков функций в программах на Visual C++

Цель работы

Познакомиться с понятиями «класс» и «объект»; изучить принципы работы с классом Graphics; создать программу из примера по приведенным инструкциям; разработать программу по своему варианту задания в программах на языке Visual С++.

Краткие теоретические положения Объекты и классы. Понятие объекта-экземпляра класса

До сих пор мы пользовались свойствами и методами различных объектов, не встречая особых препятствий. Например, мы использовали метод Focus() объекта Button1 или свойство Text объекта Label1. Однако существуют объекты со своими свойствами и методами, которые не позволяют пользоваться ими напрямую, как мы делали до этого.

Например, разместим в форме текстовое поле textBox1 и попробуем в окне кода изменить размер шрифта для текстового поля. Для этого напишем, казалось бы, правильный оператор:

textBox1->Font->Size=14;

Однако компилятор Visual C++ при попытке построения исполняемого файла выдаст сообщение об ошибке примерно такого содержания:

error C2039: 'set' : is not a member of 'System::Drawing::Font::Size'

В справочной системе эта ошибка поясняется следующим образом:

The code incorrectly calls or refers to a member of a structure, class, or union. (Программный код некорректно обращается к члену структуры, класса или объединения.)

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

Решение проблемы – в создании специальных объектов, являющихся экземплярами класса.

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

Каждый объект-экземпляр класса является точной копией описанного в классе объекта. Например, нам знакомы объекты типа Button. На самом деле все кнопки являются объектами-экземплярами класса Button, именно поэтому все они имеют одинаковые свойства и метода.

Создание объектов из класса

Посмотрим, каким образом можно создавать объекты-экземпляры класса. Рассмотрим два способа.

1 способ (Создание вручную во время разработки приложения). Создайте новый проект. Разместите на форме три кнопки. Знаете, что вы сейчас сделали? Вы создали несколько объектов из класса Button. Первый объект называется button1, второй – button2, третий – button3. Все они – экземпляры класса Button.

Сразу после своего создания объекты-кнопки одинаковы. После того, как объект создан, можно изменять его свойства, например, размер, цвет, надпись и т.д. Однако, как бы мы не меняли «внешность» кнопки, она всегда останется экземпляром класса Button. Аналогично, можно создать сколько угодно объектов класса Label или TextBox.

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

Пример программы №1. Создайте новый проект с формой, содержащей одну кнопку button1. Создайте такую процедуру обработки нажатия на кнопку button1:

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)

{Button^ btn1;

btn1 = gcnew Button();

btn1->Text = "Кнопка 1";

btn1->Width=90;

this->Controls->Add(btn1);

}

Сохраните проект и запустите его. Нажмите на кнопку button1, и у Вас на форме появится еще одна новая кнопка с надписью Кнопка 1.

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

int X;

Мы в процедуре будем использовать переменную с названием btn1. При этом мы указываем ее тип как Button:

Button^ btn1;

Тип Button – это один из многих используемых в Visual C++ классов. Переменные, принадлежащие какому-нибудь классу, называются объектными. Поэтому можно сказать, что переменная btn1 имеет объектный тип. Это значит, что ее значением является не число или строка, а объект-экземпляр класса.

Таким образом, после выполнения первой строки кода функции создается новая переменная btn1, но новая кнопка еще не создана. Чтобы создать кнопку, мы используем оператор:

btn1 = gcnew Button();

Служебное слово gcnew вместе с Button означает, что создается новый объект класса Button. При этом в памяти компьютера отводится место под объект типа Button и это место связывается с переменной btn1.

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

btn1->Text = "Кнопка 1";

btn1->Width=90;

Чтобы кнопка появилась на форме, необходимо добавить ее в коллекцию элементов управления формы (Controls) с помощью метода Add (слово this в данной конструкции означает текущую форму):

this->Controls->Add(btn1);

В результате кнопка btn1 добавится к элементам управления формы.

Аналогично можно создать еще одну кнопку. Измените функцию обработки нажатия на кнопку Button1 следующим образом (строки, которые нужно добавить, выделены жирным):

B utton^ btn1;

btn1 = gcnew Button();

btn1->Text = "Кнопка 1";

btn1->Width=90;

this->Controls->Add(btn1);

Button^ btn2 = gcnew Button();

btn2->Text = "Кнопка 2";

btn2->Width=90;

btn2->Top = 50;

this->Controls->Add(btn2);

Сохраните проект и запустите его. В результате выполнения процедуры создаются две новые кнопки.

Код для создания второй кнопки аналогичен коду для создания первой кнопки за исключением того, что строки

Button^ btn1;

btn1 = gcnew Button();

заменены на одну строку

Button^ btn2 = gcnew Button();

Это более короткий вариант записи операторов объявления и создания объекта-экземпляра класса.

У второй кнопки будет надпись Кнопка 2 и такая же ширина, как у первой кнопки – 90 пикселов.

По умолчанию все кнопки и другие видимые компоненты появляются на форме в ее левом верхнем углу. Чтобы вторая кнопка не загородила первую, мы сдвинем ее немного вниз. Для этого изменим значение свойства Top кнопки btn2 на 50:

btn2.Top = 50

И в самом конце добавим ее к коллекции объектов формы:

Me.Controls.Add(btn2)