программирование. ЛР1. Классы. Открытые и закрытые уровни доступа. Конструкторы. Инициализация данных объекта. Определение методов. Создание объекта в памяти. Стандартные потоки вводавывода
Скачать 96.5 Kb.
|
). Деструктор не имеет возвращаемого значения. Классы C++ позволяют группировать данные объекта и функции объекта (методы), которые оперируют с этими данными, в одной переменной. Есть две возможности определения методов объекта. Первая состоит в том, что можно включить весь код функции внутрь определения класса. Несмотря на то, что включение кода метода в определение класса может представляться удобным, однако, когда классы становятся сложнее и включают несколько методов, операторы функций могут вносить беспорядок в определение классов. Таким образом, многие программы определяют операторы функции вне класса. В определение класса программа должна включать прототип функции, который указывает имя функции, тип возвращаемого значения и типы параметров. Имеются 4 стандартных предопределенных потока, предназначеных для: cin - стандартного ввода; cout - стандартного вывода; cerr - стандартного вывода ошибок; clog - полностью буферизованного вывода ошибок. Результат выполнения лабораторной работы. Лабораторная работа выполнялась в среде Visual Studio 2022. В среде программирования на С++ создаем консольный проект с именем LAB1 в каталоге LAB1 В проекте создаем файлы main.h (заголовочный файл) и main.cpp (файл исходного кода). В файле main.h определяем с помощью ключевого слова class объект Person. class Person { private: int NumbCh; char Fio[20]; bool Pol; float Vozrast; }; Опишем конструктор объекта, аргументы которого будут инициализировать все данные объекта. Person::Person(int NumbCh, const char* Fio, bool Pol, float Vozrast) { Person::NumbCh = NumbCh; strcpy_s(Person::Fio, Fio); Person::Pol = Pol; Person::Vozrast = Vozrast; } Опишем конструктор объекта по умолчанию (без аргументов), проинициализировав все данные. Person(int,const char*, bool, float); Опишите в объекте функцию void Print() с открытым уровнем доступа (public), которая будет выводить данные на экран. class Person { public: Person(int,const char*, bool, float); void Print(void); void Input(void); private: int NumbCh; char Fio[20]; bool Pol; float Vozrast; }; С помощью директивы #include включим в файл main.cpp заголовочные файлы #include #include #include #include "main.h" Ниже определим конструктор объекта, инициализирующий все данные объекта значениями аргументов. В теле конструктора используем функцию strcpy(стр1, стр2) для копирования строки имени человека (ФИО). Person::Person(int NumbCh, const char* Fio, bool Pol, float Vozrast) { Person::NumbCh = NumbCh; strcpy_s(Person::Fio, Fio); Person::Pol = Pol; Person::Vozrast = Vozrast; } Затем определим функцию void Person::Print(). void Person::Print(void) { std::cout << NumbCh << " " << Fio << " " << Pol << " " << Vozrast << std::endl; } Напишем главную функцию программы int main(). Внутри ее создаем объект Person, указав все значения данных объекта. Выводим данные объекта на экран, вызвав функцию Print. int main(void) { Person worker(1, "SedovI.V.", 0, 22); worker.Print(); } Результат выполнения программы Затем создаем динамический объект Person с помощью обычного конструктора и оператора new. Выведим данные объекта на экран и удаляем динамический объект из памяти с помощью оператора delete. Person* per; per = new Person(2, "SedovaK.V.", 1, 19); per->Print(); delete per; Результат выполнения программы Напишем функцию ввода данных в объект с клавиатуры void Person::Input(). void Person::Input(void) { std::cin >> NumbCh >> Fio >> Pol >> Vozrast; } Затем в теле функции main создаем объект Person с помощью конструктора по умолчанию и вводим данные в объект с клавиатуры, вызвав функцию Input. Для удобства закомментируем предыдущие способы инициализации объекта. Person* per2 = new Person(0, " ", 0, 0); per2->Input(); per2->Print(); Результат выполнения программы |
8. Ниже определите конструктор объекта, инициализирующий все данные объекта значениями аргументов. В теле конструктора используйте функцию strcpy(стр1, стр2) для копирования строки имени человека (ФИО).
9. Затем определите функцию void Person::Print(). В теле функции для вывода данных используйте стандартный поток вывода cout << значение1 << значение2 << … << endl;.
10. Ниже напишите главную функцию программы int main(). Внутри ее создайте объект Person, указав все значения данных объекта. Выведите данные объекта на экран, вызвав функцию Print.
11. Затем создайте динамический объект Person с помощью обычного конструктора и оператора new. Выведите данные объекта на экран. Удалите динамический объект из памяти с помощью оператора delete.
12. Напишите функцию ввода данных в объект с клавиатуры void Person::Input(). В теле функции для ввода данных используйте стандартный поток ввода cin >> значение1 >> значение2 >> …;
13. Затем в теле функции main создайте объект Person с помощью конструктора по умолчанию и введите данные в объект с клавиатуры, вызвав функцию Input. Выведите данные объекта на экран.
Теория
Класс представляет собой главное инструментальное средство C++ для объектно-ориентированного программирования.
Описание класса С++ начинается с ключевого слова class. Тело класса состоит из определений членов и спецификаторов доступа – ключевых слов public, private и protected. К тем членам, которые перечислены после public, можно обращаться из любого места программы, а к тем, которые объявлены после private, могут обращаться только функции-члены данного класса.
Чтобы упростить процесс инициализации элементов данных класса, C++ использует специальную функцию, называемую конструктором, которая запускается для каждого создаваемого вами объекта. Подобным образом C++ обеспечивает функцию, называемую деструктором, которая запускается при уничтожении объекта.
Конструктор представляет собой метод класса, который облегчает инициализацию элементов данных класса.
Конструктор имеет такое же имя, как и класс.
Конструктор не имеет возвращаемого значения.
Каждый раз, когда программа создает переменную класса, C++ вызывает конструктор класса, если конструктор существует.
Многие объекты могут распределять память для хранения информации;
Деструктор имеет такое же имя, как и класс, за исключением того, что его имя предваряется символом тильды (