Файл: Классы. Открытые и закрытые уровни доступа. Конструкторы. Инициализация данных объекта. Определение методов. Создание объекта в памяти. Стандартные потоки вводавывода.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 09.11.2023
Просмотров: 122
Скачиваний: 3
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Оглавление
ТЕМА 2
Вариант лабораторной работы 3
1.ТЕОРЕТИЧЕСКИЙ МАТЕРИАЛЛ 4
2.РАЗРАБОТКА ПРОГРАММЫ 8
3.ТЕСТИРОВАНИЕ ПРОГРАММЫ 15
Список использованных источников 16
ПРИЛОЖЕНИЕ А. КОД ФАЙЛА «MAIN.H» 17
ПРИЛОЖЕНИЕ Б. КОД ФАЙЛА «MAIN.CPP» 18
ТЕМА
Классы. Открытые и закрытые уровни доступа. Конструкторы. Инициализация данных объекта. Определение методов. Создание объекта в памяти. Стандартные потоки ввода-вывода.Вариант лабораторной работы
Вариант №21ДОГОВОРномер — int руководитель — char сумма — floatЯзык программирования: C++Среда разработки: Visual Studio 2022-
ТЕОРЕТИЧЕСКИЙ МАТЕРИАЛЛ
-
Типы данных C++
-
-
Логический тип (bool) -
Символьные типы (такие как char) -
Целые типы (такие как int) -
Типы с плавающей запятой (такие как double)
-
Перечислимые типы для представления конечного набора значений (enum)
-
Тип void, указывающий на отсутствие информации
-
Указательные типы (такие как int*) -
Массивы (такие как char[]) -
Ссылочные типы (такие как doubles) -
Структуры данных и классы
-
Указатели и массивы
char с = 'а';char* р = &с; //р содержит адрес переменной сchar с2 = *р; //с2 == 'а'Указатель р показывает на переменную с, значением которой служит 'а'. Таким образом, значение выражения *р (присваиваемое с2) есть 'а'Для заданного типа Т. тип T[size] является «массивом из size элементов типа Т». Индексация (нумерация) элементов требует индексов от 0 и до size-1. Например:float v[3]; // массив из трех элементов типа float: v[0], v[l], v[2]char* a[32] ; //массив из 32 указателей на char: а[0] .. а[31]Количество элементов массива (размер массива) должно задаваться константным выражением. Если же нужен массив переменного размера, необходимо использовать тип vector.Многомерные массивы определяются как массивы массивов. Пример:int d2 [10][20] ; //d2 есть массив из 10 массивов по 20 целых в каждомМассив можно проинициализировать списком значений. Например:int v[] = {1,2,3,4};char v2[] = {'a', 'b', ' с',0};Когда массив объявляется без явного указания размера, но со списком инициализирующих значений, размер вычисляется по количеству этих значений. Следовательно, v1 и v2 имеют типы int[4] и char [4], соответственно.
-
Функции
-
Классы
Атрибут public имеют члены класса, обращение к которым осуществляется как к полям структуры. Эти члены называются открытыми.Если первичный класс объявлен с ключевым словом class, то первые его члены будут закрытыми по умолчанию, если как stuct, то открытыми. В случае union члены класса могут быть только открытымиСоставная функция класса, вызываемая при создании объекта, называется конструктором.Основные свойства конструктора:
-
Класс может иметь несколько конструкторов. Имя каждого конструктора совпадает с именем класса, для которого этот конструктор определен. Конструкторы могут быть перегружены и иметь параметры по умолчанию. -
Конструктор не имеет возвращаемого значения. -
Конструктор может быть объявлен и в закрытой, и в защищенной, и в открытой части класса. Если конструктор объявлен в закрытой части, то объекты этого класса могут создаваться только дружественными функциями, а если в защищенной — дружественными функциями производного класса. -
Конструктор может быть определен вне тела класса. -
-
имя объект(параметры); -
имя объект = имя(параметры); -
имя объект = параметр;
-
РАЗРАБОТКА ПРОГРАММЫ
-
Заголовочный файл «main.h» -
Файл исходного кода «main.cpp»
-
Подключение заголовочных файлов в файле main.cpp
#include
#include
#include
#include "main.h"
-
Объявление класса в заголовочном
class Contract { //Класс "Договор"
private:
int number; //Номер договора
char contractor[100]; //Подрядчик
char nameOfManager[100]; //Фамилия руководителя
float sum; //Сумма
};
Данные класса имеют закрытый уровень доступа (private).
-
Методы get
Метод «get» предназначен для обращения к объекту и получению значения переменной.
Прототипы методов get в заголовочном файле «main.h»
class Contract { //Класс "Договор"
private:
…
public:
…
//Методы Get
int get_number(void);
const char* get_contractor(void);
const char* get_nameOfManager(void);
float get_sum(void);
…
};
Реализация методов «get» в файле «main.cpp»
#include …
// Методы Get
int Contract::get_number(void) { //Получение номера договора
return number;
}
const char* Contract::get_contractor(void) { //Получение наименования подрядчика
return contractor;
}
const char* Contract::get_nameOfManager(void) { //Получение ФИО руководителя
return nameOfManager;
}
float Contract::get_sum(void) { //Получение суммы договора
return sum;
}
int main() {
…
return 0;
}
-
Методы set
Метод «set» предназначается для изменения данных в объекте.
Прототипы методов «get» в заголовочном файле «main.h»
class Contract { //Класс "Договор"
private:
…
public:
…
//Методы Set
void set_number(int iNum);
void set_contractor(const char* cCon);
void set_nameOfManager(const char* cNOM);
void set_sum(float fSum);
…
};
Реализация методов «set» в файле «main.cpp»
#include …
//Методы Set
void Contract::set_number(int iNum) { //Ввод номера договора
number = iNum;
}
void Contract::set_contractor(const char* cCon) { //Ввод наименования подрядчика
strcpy(contractor, cCon);
}
void Contract::set_nameOfManager(const char* cNOM) { //Ввод ФИО руководителя
strcpy(nameOfManager, cNOM);
}
void Contract::set_sum(float fSum) { //Ввод суммы договора
sum = fSum;
}int main() {
…
return 0;
}
-
Функция ввода данных в объект с клавиатуры Input()
Прототип функции в заголовочном файле «main.h»
class Contract { //Класс "Договор"
private:
…
public:
…
void Input(); //Ввод данных
};
Реализация функции в файле «main.cpp»
#include …
…
void Contract::Input(void) { //Ввод данных
cout << "Введите данные" << endl;
cout << "Номер договора: ";
int inNum;
cin >> inNum;
Contract::set_number(inNum);
cin.get();
cout << "Подрядчик: ";
char inCon[100];
cin.getline(inCon, 100);
Contract::set_contractor(inCon);
cout << "Руководитель: ";
char inMan[100];
cin.getline(inMan, 100);
Contract::set_nameOfManager(inMan);
cout << "Сумма договора: ";
float inSum;
cin >> inSum;
Contract::set_sum(inSum);
}
int main() {
…
return 0;
}
-
Функция вывода данных в консоль Print()
Прототип функции в заголовочном файле «main.h»
class Contract { //Класс "Договор"
private:
…
public:
…
void Print(); //Ввод данных
};
Реализация функции в файле «main.cpp»
#include …
…
void Contract::Print(void) { //Вывод данных
cout << std::endl;
cout << "Номер договора: " << get_number() << endl;
cout << "Подрядчик: " << get_contractor() << endl;
cout << "Руководитель: " << get_nameOfManager() << endl;
cout << "Сумма договора: " << get_sum() << endl;
}
…
int main() {
…
return 0;
}
-
Конструктор объекта по умолчанию (без аргументов)
Прототип конструктора без аргументов в заголовочном файле:
class Contract { //Класс "Договор"
private:
…
public:
Contract(); //Прототип конструктора
…
};
Определение конструктора по умолчанию в файле «main.cpp»
#include …
Contract::Contract(void) ://Конструктор по умолчанию
number(1),
contractor(),
nameOfManager(),
sum(100.5)
{
strcpy(contractor, "Название подрядчика по умолчанию");
strcpy(nameOfManager, "ФИО руководителя по умолчанию");
}
…
int main() {
…
return 0;
}
Создание объекта «icon» с помощью конструктора по умолчанию и вывод его данных в консоль
#include …
Contract::Contract(void) ://Конструктор по умолчанию
number(1),
contractor(),
nameOfManager(),
sum(100.5)
{
strcpy(contractor, "Название подрядчика по умолчанию");
strcpy(nameOfManager, "ФИО руководителя по умолчанию");
}
…
int main() {
…
cout << "/////Объект созданный конструктором по умолчанию/////" << endl;
Contract icon;
icon.Print();
…
return 0;
}
Создание объекта «icon2» с помощью конструктора по умолчанию, изменение его данных с помощью методов «set» и вывод его данных в консоль
#include …
Contract::Contract(void) ://Конструктор по умолчанию
number(1),
contractor(),
nameOfManager(),
sum(100.5)
{
strcpy(contractor, "Название подрядчика по умолчанию");
strcpy(nameOfManager, "ФИО руководителя по умолчанию");
}
…
int main() {
…
cout << endl << "/////Объект созданный конструктором по умолчанию и изменённый с помощью set/////" << endl;
Contract icon2;
icon2.set_number(2);
icon2.set_contractor("ИП Иванов И.И.");
icon2.set_nameOfManager("Иванов иван иванович");
icon2.set_sum(200.5);
icon2.Print();
…
return 0;
}
-
Конструктор объекта, аргументы которого инициализируют все данные объекта.
Прототип конструктора с аргументами в заголовочном файле:
class Contract { //Класс "Договор"
private:
…
public:
…
Contract(int inNum, const char* inCon, const char* inNOM, float inSum);
…
};
Определение конструктора с аргументами в файле «main.cpp»
#include …
Contract::Contract(int inNum, const char* inCon, const char* inNOM, float inSum) {
set_number(inNum);
set_contractor(inCon);
set_nameOfManager(inNOM);
set_sum(inSum);
}…
int main() {
…
return 0;
}
Создание объекта «icon3» с помощью конструктора, аргументы которого инициализируют все данные объекта и вывод его данных в консоль
#include …
Contract::Contract(int inNum, const char* inCon, const char* inNOM, float inSum) {
set_number(inNum);
set_contractor(inCon);
set_nameOfManager(inNOM);
set_sum(inSum);
}…
…
int main() {
…
cout << endl << "/////Объект созданный конструктором с аргументами/////" << endl;
Contract icon3(3, "Название по умолчанию", "ФИО руководителя по умолчанию", 100.5);
icon3.Print();
…
return 0;
}
-
Создайте динамический объект «icon4» с помощь оператора «new».
#include …
Contract::Contract(void) ://Конструктор по умолчанию
number(1),
contractor(),
nameOfManager(),
sum(100.5)
{
strcpy(contractor, "Название подрядчика по умолчанию");
strcpy(nameOfManager, "ФИО руководителя по умолчанию");
}
…
int main() {
…
cout << endl << "/////Создание динамического объекта/////" << endl;
Contract* icon4 = new Contract; //Динамический объект
icon4->set_number(4);
icon4->set_contractor("ОАО Новое Время");
icon4->set_nameOfManager("Временьщиков Игорь Васильевич");
icon4->set_sum(200.4);
icon4->Print();
delete icon4; //Удаление динамического объекта
…
return 0;
}
-
Создание объекта «icon5», данные которого вводит пользователь с помощью консоли
#include …
Contract::Contract(void) ://Конструктор по умолчанию
number(1),
contractor(),
nameOfManager(),
sum(100.5)
{
strcpy(contractor, "Название подрядчика по умолчанию");
strcpy(nameOfManager, "ФИО руководителя по умолчанию");
}
…
int main() {
…
cout << endl << "/////Объект созданный конструктором по умолчанию и данными введёнными пользователем/////" << endl;
Contract icon5;
icon5.Input();
icon5.Print();
…
return 0;
}
-
ТЕСТИРОВАНИЕ ПРОГРАММЫ
При запуске программы создаются все объекты, данные первых 4-х объектов выводятся в консоль, после этого программа ожидает ввода данных последнего объекта.
После ввода пользователем данных объекта, данные выводятся на экран
Программа завершилась без ошибок и ожидает нажатие любой клавиши для завершения.
Список использованных источников
-
Катаев М.Ю. Объектно-ориентированное программирование: учебное пособие /М. Ю. Катаев. — Томск: Эль Контент, 2013. — 212 с. -
Катаев М.Ю. Объектно-ориентированное программирование: лабораторный практикум. — Томск: Факультет дистанционного обучения, ТУСУР, 2014. — 53 с. -
Бьерн Страуструп. Язык программирования C++. Специальное издание. Пер. с англ. —М.: Издательский дом Бином, 2019 г. — 1136 с.: ил.
ПРИЛОЖЕНИЕ А. КОД ФАЙЛА «MAIN.H»
#pragma once
class Contract { //Класс "Договор"
private:
int number; //Номер договора
char contractor[100]; //Подрядчик
char nameOfManager[100]; //Фамилия руководителя
float sum; //Сумма
public:
Contract(); //Прототип конструктора
Contract(int inNum, const char* inCon, const char* inNOM, float inSum);
//Методы Get
int get_number(void);
const char* get_contractor(void);
const char* get_nameOfManager(void);
float get_sum(void);
//Методы Set
void set_number(int iNum);
void set_contractor(const char* cCon);
void set_nameOfManager(const char* cNOM);
void set_sum(float fSum);
//
void Print(); //Вывод данных
void Input(); //Ввод данных
};
ПРИЛОЖЕНИЕ Б. КОД ФАЙЛА «MAIN.CPP»
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
#include "main.h"
using namespace std;
Contract::Contract(void) ://Конструктор по умолчанию
number(1),
contractor(),
nameOfManager(),
sum(100.5)
{
strcpy(contractor, "Название подрядчика по умолчанию");
strcpy(nameOfManager, "ФИО руководителя по умолчанию");
}
Contract::Contract(int inNum, const char* inCon, const char* inNOM, float inSum) {
set_number(inNum);
set_contractor(inCon);
set_nameOfManager(inNOM);
set_sum(inSum);
}
// Методы Get
int Contract::get_number(void) { //Получение номера договора
return number;
}
const char* Contract::get_contractor(void) { //Получение наименования подрядчика
return contractor;
}
const char* Contract::get_nameOfManager(void) { //Получение ФИО руководителя
return nameOfManager;
}
float Contract::get_sum(void) { //Получение суммы договора
return sum;
}
//Методы Set
void Contract::set_number(int iNum) { //Ввод номера договора
number = iNum;
}
void Contract::set_contractor(const char* cCon) { //Ввод наименования подрядчика
strcpy(contractor, cCon);
}
void Contract::set_nameOfManager(const char* cNOM) { //Ввод ФИО руководителя
strcpy(nameOfManager, cNOM);
}
void Contract::set_sum(float fSum) { //Ввод суммы договора
sum = fSum;
}
void Contract::Print(void) { //Вывод данных
cout << std::endl;
cout << "Номер договора: " << get_number() << endl;
cout << "Подрядчик: " << get_contractor() << endl;
cout << "Руководитель: " << get_nameOfManager() << endl;
cout << "Сумма договора: " << get_sum() << endl;
}
void Contract::Input(void) { //Ввод данных
cout << "Введите данные" << endl;
cout << "Номер договора: ";
int inNum;
cin >> inNum;
Contract::set_number(inNum);
cin.get();
cout << "Подрядчик: ";
char inCon[100];
cin.getline(inCon, 100);
Contract::set_contractor(inCon);
cout << "Руководитель: ";
char inMan[100];
cin.getline(inMan, 100);
Contract::set_nameOfManager(inMan);
cout << "Сумма договора: ";
float inSum;
cin >> inSum;
Contract::set_sum(inSum);
}
int main() {
SetConsoleCP(1251);// установка кодовой страницы win-cp 1251 в поток ввода
SetConsoleOutputCP(1251); // установка кодовой страницы win-cp 1251 в поток вывода
cout << "/////Объект созданный конструктором по умолчанию/////" << endl;
Contract icon;
icon.Print();
cout << endl << "/////Объект созданный конструктором по умолчанию и изменённый с помощью set/////" << endl;
Contract icon2;
icon2.set_number(2);
icon2.set_contractor("ИП Иванов И.И.");
icon2.set_nameOfManager("Иванов иван иванович");
icon2.set_sum(200.5);
icon2.Print();
cout << endl << "/////Объект созданный конструктором с аргументами/////" << endl;
Contract icon3(3, "Название по умолчанию", "ФИО руководителя по умолчанию", 300.5);
icon3.Print();
cout << endl << "/////Создание динамического объекта/////" << endl;
Contract* icon4 = new Contract; //Динамический объект
icon4->set_number(4);
icon4->set_contractor("ОАО Новое Время");
icon4->set_nameOfManager("Временьщиков Игорь Васильевич");
icon4->set_sum(400.5);
icon4->Print();
delete icon4; //Удаление динамического объекта
cout << endl << "/////Объект созданный конструктором по умолчанию и данными введёнными пользователем/////" << endl;
Contract icon5;
icon5.Input();
icon5.Print();
system("pause");
return 0;
}