Студопедия — Типы данных. Прежде всего, о типе данных мы думаем в терминах того, как он выглядит — каким образом хранится в памяти
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Типы данных. Прежде всего, о типе данных мы думаем в терминах того, как он выглядит — каким образом хранится в памяти






Объектно-ориентированное программирование

 

Объектно-ориентированное программирование (ООП) — это особый концептуальный подход к проектированию программ, и C++ расширяет язык С средствами, облегчающими применение такого подхода. Ниже перечислены наиболее важные характеристики ООП: 1)абстракция; 2)инкапсуляция и сокрытие данных; 3)полиморфизм; 4)наследование; 5)повторное использование кода. Класс — это единственное наиболее важное расширение C++, предназначенное для реализации этих средств и связывающее их между собой.

 

 

Прежде всего, о типе данных мы думаем в терминах того, как он выглядит — каким образом хранится в памяти. Например, тип char занимает 1 байт памяти, a double — обычно 8 байт. Но если рассуждать далее, то мы придем к заключению, что тип данных также определен в терминах операций, которые допустимо выполнять с ним. Например, к типу int можно применять все арифметические операции. Целые числа можно складывать, вычитать, умножать, делить. Можно также применять операцию взятия модуля (%).

С другой стороны, рассмотрим указатели. Указатель может требовать для своего хранения столько же памяти, сколько и тип int. Он даже может иметь внутреннее представление в виде целого числа. Но указатель не позволяет выполнять над собой те же операции, что и целое. Например, перемножить два указателя не удастся. Эта концепция не имеет смысла, поэтому в C++ она не реализована. Таким образом, когда вы объявляете переменную как int или указатель на float, то не просто выделяете память для нее, но также устанавливаете, какие операции допустимы с этой переменной. Значит, спецификация базового типа выполняет три вещи. 1. Определяет, сколько памяти нужно объекту. 2. Определяет, как интерпретируются биты памяти. Типы long и float могут занимать одинаковое количество бит памяти, но транслируются в числовые значения по-разному. 3. Определяет, какие операции, или методы, могут быть применены с использованием этого объекта данных.

Для встроенных типов информация об операциях встроена в компилятор. Но когда вы определяете пользовательский тип в C++, то должны предоставить эту информацию самостоятельно.

 

Классы в C++

 

Класс — это двигатель C++, предназначенный для трансляции абстракции в пользовательские типы. Он комбинирует представление данных и методов для манипулирования этими данными в пределах одного пакета. Давайте взглянем на класс, представляющий акционерный капитал некоторой кампании.

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

Реалистичный подход должен позволять поддерживать хранение информации о таких вещах, как начальная стоимость и дата покупки; это необходимо для налогообложения. Кроме того, он должен предусматривать обработку таких событий, как разделение пакетов. Реализуемые операции можно ограничить следующим перечнем: 1) приобретение пакета акций компании (будущий метод acquire()); 2) приобретение дополнительных акций в имеющийся пакет (будущий метод buy()); 3) продажа пакета (метод sell()); 4) обновление объема доли в пакете акций (метод update()); 5) отображения информации о пакетах, находящихся во владении (метод show()).

Этот список можно использовать для определения открытого интерфейса класса и при необходимости позже добавлять дополнительные средства. Для поддержки этого интерфейса необходимо сохранять некоторую информацию: 1) название компании (company); 2) количество акций, находящихся во владении (shares); 3) объем каждой доли (share_val); 4) общий объем всех долей (total_val).

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

• Объявление класса, описывающее компоненты данных в терминах членов данных, а также открытый интерфейс в терминах функций-членов, называемых методами.

• Определения методов класса, которые описывают, как реализованы определенные функции-члены.

Таким образом, объявление класса предоставляет общий обзор класса, в то время как определения методов снабжают необходимыми деталями.

Обычно помещают интерфейс, имеющий форму определения класса, в заголовочный файл, а реализацию в форме кода для методов класса — в файл исходного кода. Это является обычной практикой. В примере 1.1 представлена первая стадия, пробное объявление класса под именем Stock. В этом файле применяется #ifndef и т.п. для защиты против многократного включения файла.

Чтобы упростить идентификацию классов, есть соглашение о написании имен классов с заглавной буквы. Обратите внимание, на объявление класса, на функции-члены, а также на разделы public и private. Рассмотрим, как все работает.

Пример 1.1 (stock00.h).

 

 

Ключевое слово class в C++ идентифицирует код в примере 1.1 (stock00.h) как определение класса. В таком контексте ключевые слова class и typename не являются синонимами, как это было в параметрах шаблона; typename здесь использовать нельзя. Данный синтаксис идентифицирует Stock в качестве имени типа для нового класса. Это позволяет объявлять переменные, которые называются объектами или экземплярами типа Stock. Каждый индивидуальный объект этого типа представляет отдельный пакет акций, находящийся во владении некоторого человека. Например, следующее объявление создает два объекта с именами sally и sollу:

Объект sally, например, представляет пакет акций определенной компании, принадлежащий Салли. Аналогично, объект solly, - это пакет акций, которым владеет Солли.

Информация, которую мы решили сохранять, появляется в форме данных-членов класса, таких как company и shares. Член company объекта sally, например, хранит название компании, член share содержит количество долей общего пакета акций компании, которыми владеет Салли, член share_val соответствует объему каждой доли, а член total_val — общему объему всех долей. Аналогично необходимые операции представлены в виде функций-членов (или методов), таких как sell() и update(). Функция-член может быть определена на месте, как, например, set_tot(), либо подобно остальным функции-члены в этом классе представлена с помощью прототипа. Полные определения остальных функций-членов появятся позже, в файле реализации, но прототипов уже достаточно для описания их интерфейса. Связывание данных и методов в единое целое — наиболее замечательное свойство класса. При таком проектном решении создание объекта типа Stock автоматически устанавливает правила, регулирующие его использованием.

Замечание. Известно, что классы istream и ostream имеют функции-члены вроде get() и getline(). Прототипы функций в определении класса Stock демонстрируют установку функций-членов. Заголовочный файл iostream, например, содержит прототип getline() в объявлении класса iostream.

 







Дата добавления: 2015-09-19; просмотров: 411. Нарушение авторских прав; Мы поможем в написании вашей работы!



Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...

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

Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

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

Тактические действия нарядов полиции по предупреждению и пресечению групповых нарушений общественного порядка и массовых беспорядков В целях предупреждения разрастания групповых нарушений общественного порядка (далееГНОП) в массовые беспорядки подразделения (наряды) полиции осуществляют следующие мероприятия...

Механизм действия гормонов а) Цитозольный механизм действия гормонов. По цитозольному механизму действуют гормоны 1 группы...

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

Измерение следующих дефектов: ползун, выщербина, неравномерный прокат, равномерный прокат, кольцевая выработка, откол обода колеса, тонкий гребень, протёртость средней части оси Величину проката определяют с помощью вертикального движка 2 сухаря 3 шаблона 1 по кругу катания...

Неисправности автосцепки, с которыми запрещается постановка вагонов в поезд. Причины саморасцепов ЗАПРЕЩАЕТСЯ: постановка в поезда и следование в них вагонов, у которых автосцепное устройство имеет хотя бы одну из следующих неисправностей: - трещину в корпусе автосцепки, излом деталей механизма...

Studopedia.info - Студопедия - 2014-2024 год . (0.01 сек.) русская версия | украинская версия