Главная » Статьи » Программирование » С++

Вступление в С++: ООП, инкапсуляция, классы, конструкторы и прочие мелочи...

Создавая экзаменационную программу «Морской бой» на Си, прибег к использованию структур, чтобы суметь описать корабли, как пользователя, так и компьютера. При этом количество структур оказалось довольно большим. Количество функций, описывающих их расположение, оказалось также немаленьким. Как водится, структуры и прототипы функций вынес в заголовочный файл, а сами функции прописал в еще одном файле с расширением .cpp. Однако к существующим заданиям нам еще добавили и очередные темы, но уже в С++. Как я понял понятие класса могло существенно мне упростить задачу с описанием кораблей. Но это уже в будущем, а пока что… Классы!

Язык программирования С++, в отличие от Си, является языком объектно-ориентированного программирования. Тогда как Си – это процедурный язык. В процедурных языках, как правило, функции, переменные могут располагаться в разных частях программного кода и они не зависят друг от друга, хотя и относятся к одному и тому же объекту. В объектно-ориентированных языках функции и переменные, согласно определению, связаны между собой и обычно относятся к какому-либо конкретному объекту. При этом функции и переменные объединяются в программном коде специальным образом.
 
Основными базовыми принципами программирования в С++ являются: инкапсуляцияполиморфизм и наследование. Стивен Прат в учебном пособии «Язык программирования С++» выделяет еще такой принцип как абстрагирование. Инкапсуляция обозначает механизм позволяющий связать данные и программный код, а также позволяет обезопасить доступ к данным, так как согласно этому механизму существуют элементы private или элементы закрытого доступа, элементы public или элементы общего доступа, позволяющие обеспечить интерфейс доступа к элементам закрытого доступа. Существует еще и защищенный режим доступа или protected. Полиморфизм определяется как атрибут, что позволяет с помощью одного интерфейса обращаться к целому классу  методов. Наследование же предполагает наличие у объекта уникальных свойств, которые могут наследоваться другим объектом в дополнение к его уникальным свойствам и методам.
 
В языке программирования С++ как в объектно-ориентированном выделяют такие пользовательские типы данных как классы. Каждому классу соответствует объект, которому определяются свойства и методы. В каждом из классов определяют закрытые элементы (private) и элементы-методы в открытой зоне (public), благодаря которым у функций появляется возможность обращения к сокрытым элементам. Объявление класса как пользовательского типа данных происходит следующим образом:
 
class имя_класса 
 
{
private;
 
элементы класса
 
public;
 
методы класса
 
};
 
Выделяют так называемые элементы члены класса, которыми обычно бывают переменные и константные значения, а также элементы методы класса, которыми являются функции описывающие свойства данного класса. Именно благодаря существованию методов класса мы можем получить доступ к сокрытым членам класса.
 
Кроме того, в классе принято выделять еще так называемые конструкторы и деструкторы. Первые обладают механизмом построения объекта класса. У них открытый спецификатор доступа к закрытым объектам класса. Конструктор – это специальный метод, который позволяет инициализировать сокрытые данные. Он не имеет типа и не возвращает никакого значения. Однако конструктору можно передать фактические аргументы (конструкторы с параметрами). В конструкторе можно выделить память под требуемые элементы. Конструктору по умолчанию таких параметров не передают. Существует еще конструктор копирования объекта. Однако конструктор не обрабатывает члены данных. Эту функцию выполняют лишь методы класса. Существует так называемый инициализатор конструкторов, главной задачей которого является инициализация переменных. Конструкторы имеют то же имя, что и класс.
 
public:имя_класса (); - конструктор по умолчанию (заданные значения для инициализации отсутствуют)
 
public:имя класса (переменная 1, переменная 2 и т д); конструктор с заданными переменными 
 
public:имя_класса (имя_класса &);   конструктор копирования объекта
 
В отдельном файле конструкторы вместе с методами определяют, так как выше указанное является объявлением конструкторов. Инициализатор конструктора:
 
public:имя_класса (переменная 1, переменная 2 и т д): переменная из privateданных2 (переменная 2), переменная из privateданных 1 (переменная 1);
 
В отличие от конструкторов деструкторы призваны разрушать объекты класса. Деструкторы также не возвращают никаких значений и не определяются типом, носят название класса, но опять же в отличие от конструкторов обозначаются впереди значком «тильда»:
 
~имя_класса (); как объявление
 
В определении, к примеру, можно указать оператор delete для высвобождения выделенной в конструкторе объекта динамической памяти.Вызов конструкторов и деструкторов производится автоматически вне зависимости от существования явного объявления. Как сказано было уже, конструктор вызывается при создании объекта, а деструктор при его разрушении. При этом если не указано никаких параметров и скобки конструктора пусты, то вызывается конструктор по умолчанию. Если же в конструктор переданы параметры, то вызывается конструктор с параметрами.   
 
Автор Иевенко Алексей
Категория: С++ | Добавил: lesha (14.03.2015)
Просмотров: 1234 | Комментарии: 3 | Теги: инкапсуляция, с++, ооп, полиморфизм, наследование | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *: