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

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

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






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

 

Объектно-ориентированное программирование (ООП) — это особый концептуальный подход к проектированию программ, и 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; просмотров: 407. Нарушение авторских прав; Мы поможем в написании вашей работы!



Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

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

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

Психолого-педагогическая характеристика студенческой группы   Характеристика группы составляется по 407 группе очного отделения зооинженерного факультета, бакалавриата по направлению «Биология» РГАУ-МСХА имени К...

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

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

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

Мелоксикам (Мовалис) Групповая принадлежность · Нестероидное противовоспалительное средство, преимущественно селективный обратимый ингибитор циклооксигеназы (ЦОГ-2)...

Менадиона натрия бисульфит (Викасол) Групповая принадлежность •Синтетический аналог витамина K, жирорастворимый, коагулянт...

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