Студенческий сайт КФУ - ex ТНУ » Учебный раздел » Учебные файлы »ПРОГРАММИРОВАНИЕ

Углубленное изучение отдельного раздела: стандартные классы С++

Тип: курсовая работа
Категория: ПРОГРАММИРОВАНИЕ
Скачать
Купить
Механизм классов в C++. Инициализация внутреннего объекта с помощью конструктора. Управление доступом к классу. Защищенные члены класса. Графические средства компилятора Borland C 3.1. Библиотека стандартных шаблонов. Реализация и использование класса.
Краткое сожержание материала:

Размещено на

УЗБЕКСКОЕ АГЕНТСТВО СВЯЗИ И ИНФОРМАТИЗАЦИИ

ТАШКЕНТСКИЙ УНИВЕРСИТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

Кафедра «Информатики и графики»

КУРСОВАЯ РАБОТА

на тему:

«УГЛУБЛЕННОЕ ИЗУЧЕНИЕ ОТДЕЛЬНОГО РАЗДЕЛА: СТАНДАРТНЫЕ КЛАССЫ С++»

Выполнила:

Студентка группы 252-10ИТр.

Буланик Анна

Приняла:

Идиатуллина Э.М.

Ташкент 2011

Оглавление

Теоретическая часть

Классы в С++

Определение

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

Управление доступом к классу

Пример реализации и использования класса

Стандартные классы: vector, string

Литература

ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

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

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

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

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

Каждый член класса может иметь свой уровень доступа (access control level), который определяет участки кода, из которых можно будет обращаться к этому члену. Большинство объектно-ориентированных языков программирования поддерживают следующие уровни доступа:

§ private (внутренний член класса) - обращение к членам класса, определённым с этим уровнем доступа возможен только из методов этого же класса. Никакие наследники класса уже не имеют доступа к этим членам.

§ protected (внутренний член иерархии классов) - обращение к членам класса, определённым с таким уровнем доступа возможен из методов этого класса и из методов классов-потомков.

§ public (открытый член класса) - доступ к членам класса, определённым с этим уровнем доступа, свободен из любого кода.

Непосредственно с классами связаны три наиболее важных механизма объектно-ориентированного программирования:

§ Наследование - позволяет описать новый класс на основе уже существующего (родительского), причём класс-потомок заимствует свойства (поля) и функциональность (методы) родительского класса. Наследование бывает простым и множественным. Основная разница между этими видами наследования состоит в том, что в первом случае у класса-потомка может только один предок, а во втором случае родительских классов может быть несколько.

§ Инкапсуляция - это сокрытие полей и методов класса, доступ к которым непосредственно извне нежелателен. При этом для взаимодействия с инкапсулированными членами класса предоставляется интерфейс и только через этот интерфейс можно взаимодействовать с ними.

§ Полиморфизм - это механизм позволяющий описывать классы с одинаковым интерфейсом, но различной внутренней реализацией. Это позволяет писать более абстрактные программы. Как пример использования полиморфизма можно представить класс геометрических примитивов или фигур (точка, линия, многоугольник, эллипс). Их общими методами могут быть смещение, поворот и масштабирование, в то время как внутренняя реализация этих методов будет различной.

Класс, как правило, имеет также специальные методы:

§ Конструктор- отличается от прочих методов тем, что не имеет определённого типа возвращаемых данных (явным образом) и не наследуется. Конструктор, как правило, имеет имя одинаковое с именем класса, в котором объявляется. Собственно задача конструктора состоит в инициализации членов экземпляра класса.

§ Деструктор- служит для деинициализации экземпляра класса и освобождения занимаемой им памяти.

КЛАССЫ В С++

Классы в С++ являются главным инструментальным средством объектно-ориентированного программирования. Это и является основным отличием C++ от С.

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

Классы похожи на структуры и реализация тех и других такова, что отличаются они только видимостью своих членов по-умолчанию. Для класса все члены по-умолчанию видны только для функций-членов класса (private), для структуры все члены по-умолчанию видны для любого кода в пределах этого же пространства имён (public).

Виды конструкторов:

1. Конструктор по умолчанию

2. Конструктор копирования

3. Конструктор преобразования

4. Виртуальный конструктор

Например:

class Complex

{

public:

1. // Конструктор по умолчанию

// (в данном случае является также и конструктором преобразования)

Complex(double i_re = 0, double i_im = 0)

: re(i_re), im(i_im)

{}

2.// Конструктор копирования

Complex(const Complex &obj)

{

re = obj.re;

im = obj.im;

}

private:

double re, im;

};

Конструктор копирования не имеет обязательных аргументов. Используется при создании массивов объектов, вызываясь для создания каждого экземпляра. В отсутствие явно заданного конструктора по умолчанию его код генерируется компилятором (что на исходном тексте, естественно, не отражается).

Конструктор, аргументом которого является ссылка на объект того же класса. Применяется в C++ для передачи объектов в функции по значению.

Конструктор копирования в основном необходим, когда объект имеет указатели на объекты выделенные в куче. Если программист не создаёт конструктор копирования, то компилятор создаст неявный конструктор копирования, который копирует указатели как есть, то есть фактическое копирование данных не происходит и два объекта ссылаются на одни и те же данные в куче. Соответственно попытка изменения «копии» повредит оригинал, а вызов деструктора для одного из этих объектов при последующем использовании другого приведёт к обращению в область памяти, уже не принадлежащую программе.

3. Аргумент должен передаваться именно по ссылке, а не по значению. Это вытекает из коллизии: при передаче объекта по значению (в частности, для вызова конструктора) требуется скопировать объект. Но для того, чтобы скопировать объект, необходимо вызвать конструктор копирования.

4. Конструктор, принимающий один аргумент. Задаёт преобразование типа своего аргумента в тип конструктора. Такое преобразование типа неявно применяется только если оно уникально.

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

«Виртуальными конструкторами» называют похожий, но другой механизм, присутствующий в некоторых языках -- например, он есть в Delphi, но нет в C++ и Java. Этот механизм позволяет создать объект любого заранее неизвестного класса при двух условиях:

· этот класс является потомком некоего наперёд заданного класса (в данном примере это класс TVehicle);

· на всём пути наследования от базового класса к создаваемому цепочка переопределения не обрывалась. При переопределении виртуального метода синтаксис Delphi требует ключевое слово overload, чтобы старая и новая функции с разными сигнатурами могли сосуществовать, override для переопределения функции либо reintroduce для задания новой функции с тем же именем -- последнее недопустимо.

Например:

type

TVehicle = class

constructor Create; virtual;

end;

TAutomobile = class (TVehicle)

constructor Create; override;

end;

TMotorcycle = class (TVehicle)

constructor Create; override;

end;

TMoped = class (TMotorcycle) // обрываем цепочку переопределения - заводим новый Create

constructor Create(x : integer); reintroduce;

end;

В языке вводится так называемый классовый тип. Этот тип в качестве значения может принимать название любого класса, производного от TVehicle.

type

CVehicle = class of TVehicle;

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

var

cv : CVehicle;

v : TVehicle;

cv := TAutomobile;

v := cv.Create;

Заметьте, что код

Другие файлы:

Геометрия. 10-11 классы.
М.: 2014. - 255 с. Издание входит в УМК А.Д. Александрова "Геометрия. 10-11 классы (профильное и углубленное изучение)". Отличительны...

Русский язык. Теория. 5-9 классы. Углубленное изучение.
М.: 2012. - 416 с. Учебник содержит полный объём теоретических сведений, предусмотренных программой для углублённого изучения русск...

Методика изучения раздела "Электротехника и электроника" в образовательной области "Технология"
Особенности технологического образования в школе. Изучение раздела "Электротехника и электроника" с обучающимися 8 класса. Календарно-тематический пла...

Английский язык. 2 класс (углубленное изучение)
Линия УМК «Верещагина И.Н. (1-4 классы)» Технология обучения английскому языку по этому учебнику основана на принципах коммуникативной направленности...

Лабараторная работа №4
Цель работы: изучение правил записи констант, переменных, выражений, операторов присваивания, раздела определения констант, раздела описания переменны...