Использование класса DataClass


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

оформить заявку

Слишком сложно? Тогда запросите консультацию специалиста!

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

ознакомиться с условиями

Включите в файл classes.cpp функцию main():
#include <iostream.h>
class DataClass
{
private:
int PrivateDataMember;
public:
DataClass(int Value);
int PublicDataMember;
int PublicMethod(void);
};
DataClass::DataClass(int Value)
{
PrivateDataMember = Value;
}
int DataClass::PublicMethod(void)
{
return PrivateDataMember;
}
void main()
{
}

Функция main() содержит код, выполняемый при запуске программы. Мы начнем ее с объявления объекта класса DataClass. Одновременно с этим мы передадим значение конструктору класса (оно будет присвоено переменной PrivateDataMember). Пусть это будет значение 1; тогда объект DataObject, принадлежащий классу DataClass, будет создаваться следующим образом:
void main()
{
DataClass DataObject(1);
.
.
.
}

Теперь у нас есть объект с именем DataObject. Он содержит данные, которые мы в него занесли, а также поддерживает метод PublicMethod().

Чтобы присвоить значение открытой переменной класса, PublicDataMember, можно воспользоваться оператором "точка" (.) языка C++. В следующем фрагменте этой переменной присваивается значение 2:
void main()
{
DataClass DataObject(1);
DataObject.PublicDataMember = 2;
.
.
.
}

Обычно все обращения к членам объекта (переменным и функциям) происходят именно так.

Например, мы можем вывести значение переменной PublicDataMember, посылая его в поток
cout:
void main()
{
DataClass DataObject(1);
DataObject.PublicDataMember = 2;
cout << "DataObject.PublicDataMember = "
<< DataObject.PublicDataMember << " ";
.
.
.
}

Но как получить значение, присвоенное PrivateDataMember? Поскольку код в функции main() не принадлежит объекту DataObject, из него нельзя напрямую обратиться к закрытой переменной этого объекта. Чтобы добраться до нее, надо вызвать метод PublicMethod() и вывести полученное значение:
void main()
{
DataClass DataObject(1);
DataObject.PublicDataMember = 2;
cout << "DataObject.PublicDataMember = "
<< DataObject.PublicDataMember << " ";
cout << "DataObject.PrivateDataMember = "
<< DataObject.PublicMethod() << " ";
}

Программа работы с классами готова - запустите ее. Результаты ее работы изображены на рис. 1.7. Как видно из рисунка, нам удалось вывести значения и открытой, и закрытой переменных объекта DataClass. Первое знакомство с классами и объектами C++ состоялось.

 
Рис. 1.7. Запуск программы classes

Ниже приведен полный текст программы из файла classes.cpp.
classes.cpp
#include <iostream.h>
class DataClass
{
private:
int PrivateDataMember;
public:
DataClass(int Value);
int PublicDataMember;
int PublicMethod(void);
};
DataClass::DataClass(int Value)
{
PrivateDataMember = Value;
}
int DataClass::PublicMethod(void)
{
return PrivateDataMember;
}
void main()
{
DataClass DataObject(1);
DataObject.PublicDataMember = 2;
cout << " DataObject.PublicDataMember = "
<< DataObject.PublicDataMember << " ";
cout <<" DataObject.PrivateDataMember = "
<< DataObject.PublicMethod() << " ";
}




Наш первый пример был крайне примитивным - он всего лишь показал, как создать класс и объект в программе на C++. Он совершенно не раскрывает основной смысл объектов - хранение данных и внутреннюю работу с ними. Сейчас мы рассмотрим более реальный пример, который покажет, как работают объекты и для чего они нужны.

Реальный пример на C++

Давайте рассмотрим более жизненный пример на C++, который бы продемонстрировал возможности объектов по внутренней обработке данных.

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

Создайте проект schoolroom и добавьте в него новый файл schoolroom.cpp. Мы создадим класс с именем SchoolClass для хранения и обработки оценок:
#include <iostream.h>
class SchoolClass {
};

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



 

Указатель - это переменная, в которой хранится адрес области памяти. В языках C и C++ имя массива представляет собой указатель на начало данных массива в памяти. Чтобы объявить указатель в C и C++, следует снабдить имя переменной префиксом * ("звездочка").

 

Мы также создадим в области данных целую индексную переменную ClassDataIndex, определяющую наше положение относительно начала массива при добавлении сведений о новом ученике:
#include <iostream.h>
class SchoolClass {
int *ClassData;
int ClassDataIndex;
};

Область памяти для хранения оценок разумнее всего выделять в конструкторе класса. Мы передадим ему количество студентов, по которому можно будет определить размеры выделяемой области. Также обратите внимание, как мы инициализируем в конструкторе индексную переменную ClassDataIndex значением 0:
#include <iostream.h>
class SchoolClass {
int *ClassData;
int ClassDataIndex;
public:
SchoolClass(int NumberStudents);
.
.
.
};
SchoolClass::SchoolClass(int NumberStudents);
{
ClassData = new int[NumberStudents];
ClassDataIndex = 0;
}

Память для хранения данных выделяется с помощью оператора C++ new. В данном случае выделяется область, размера которой достаточно для хранения NumberStudents целых чисел. Оператор new является встроенным оператором C++ и используется вместо таких функций C, как malloc() и calloc(). Мы неоднократно встретимся с ним в этой книге.

При желании можно рассматривать выделенную область памяти как массив (в C и C++ имена массивов и указатели считаются практически синонимами). Тогда для обращения к первому целому в выделенной области можно использовать запись ClassData[0], к следующему - ClassData[1] и т. д.

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

Но как избавиться от выделенной области, когда необходимость в ней отпадет? Помимо конструкторов в C++ существуют деструкторы - они вызываются при уничтожении объекта и содержат код "сборки мусора". В нашем примере деструктор будет уничтожать выделенную ранее область памяти.

Деструкторы C++

Деструктор отчасти похож на конструктор, только он автоматически вызывается при уничтожении объекта. Между ними существует даже внешнее сходство, но имя деструктора снабжается префиксом ~ ("тильда"):
#include <iostream.h>
class SchoolClass {
int *ClassData;
int ClassDataIndex;
public:
SchoolClass(int NumberStudents);
.
.
.
};
SchoolClass::SchoolClass(int NumberStudents);
{
ClassData = new int[NumberStudents];
ClassDataIndex = 0;
}
SchoolClass::~SchoolClass(void)
{
}

Деструктор должен вернуть системе область памяти, выделенную при выполнении конструктора. Для оператора new существует противоположный по смыслу оператор delete, при помощи которого можно уничтожить массив:
SchoolClass::~SchoolClass(void)
{
delete ClassData;
}

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

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


Хм, так же просматривали

Заказ

ФОРМА ЗАКАЗА

Бесплатная консультация

Наша компания занимается написанием студенческих работ. Мы выполняем: дипломные, курсовые, контрольные, задачи, рефераты, диссертации, отчеты по практике, решаем тесты и задачи, и многие другие виды заданий. Чтобы узнать стоимость, а так же условия выполнения работы заполните заявку на этой странице. Как только менеджер увидит ваше сообщение, он сразу же свяжется с вами.

Этапность

СОПРОВОЖДЕНИЕ КЛИЕНТА

Получить работу можно всего за 4 шага

01
Оставляете запрос

Оформляете заказ работы, заполняя форму на сайте.

02
Узнаете стоимость

Менеджер оценивает сложность. Узнаете точную цену.

03
Работа пишется

Оплачиваете и автор приступает к выполнению задания.

04
Забираете заказ

Получаете работу в электронном виде на вашу почту.

Услуги

НАШ СЕРВИС

Что мы еще делаем?

icon
Курсовые работы

от 1800 рублей

ПОДРОБНЕЕ
icon
Семестровые работы

от 1480 рублей

ПОДРОБНЕЕ
icon
Исследовательские работы

от 2800 рублей

ПОДРОБНЕЕ
icon
НИР (научно-исследовательские работы)

от 3300 рублей

ПОДРОБНЕЕ
icon
Решение тестов

от 320 рублей

ПОДРОБНЕЕ
icon
Работы для духовной семинарии

от 980 рублей

ПОДРОБНЕЕ