книга (И.А. Волкова, А.В. Иванов, Л.Е. Карпов - Основы объектно-ориентированного программирования. Язык программирования С++), страница 4
Описание файла
Файл "книга" внутри архива находится в папке "И.А. Волкова, А.В. Иванов, Л.Е. Карпов - Основы объектно-ориентированного программирования. Язык программирования С++". PDF-файл из архива "И.А. Волкова, А.В. Иванов, Л.Е. Карпов - Основы объектно-ориентированного программирования. Язык программирования С++", который расположен в категории "". Всё это находится в предмете "практикум (прикладное программное обеспечение и системы программирования)" из 4 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 4 страницы из PDF
Синтаксис описания классаСинтаксис описания класса:19Классы и объекты С++class Имя_класса { определение_членов_класса };Члены класса можно разделить на информационные членыи функции-члены (методы) класса. Информационные члены описываютвнутреннюю структуру информации, хранящейся в объекте, который создается на основе класса. Методы класса описывают алгоритмы обработки этойинформации.Данные, хранящиеся в информационных членах, описывают состояниеобъекта, созданного на основе класса. Состояние объекта изменяется на основе изменения хранящихся данных с помощью методов класса.
Алгоритмы,заложенные в реализации методов класса, определяют поведение объекта, тоесть реагирование объекта на поступающие внешние воздействия в видевходных данных.3.2. Управление доступом кчленам классаПринцип инкапсуляции обеспечивается вводом в класс областей доступа:— private— закрытый, доступный только собственным методам;— public— открытый, доступный любым функциям;— protected— защищенный, доступный только собственным методам и методам производных классов.Члены класса, находящиеся в закрытой области (private), недоступныдля использования со стороны внешнего кода. Напротив, члены класса, находящиеся в открытой секции (public), доступны для использования со стороны внешнего кода.
При описании класса каждый член класса помещаетсяв одну из перечисленных выше областей доступа следующим образом:class Имя_класса{private:определение_закрытых_членов_классаpublic:определение_открытых_членов_классаprotected:определение_защищенных_членов_класса...};Порядок следования областей доступа и их количество в классе —произвольны.Служебное слово, определяющее первую область доступа, может отсутствовать.
По умолчанию эта область считается private.В закрытую (private) область обычно помещаются информационныечлены, а в открытую (public) область — методы класса, реализующие интерфейс объектов класса с внешней средой. Если какой-либо метод имеетвспомогательное значение для других методов класса, являясь подпрограм-20Классы и объекты С++мой для них, то его также следует поместить в закрытую область. Это обеспечивает логическую целостность информации.После описания класса его имя можно использовать для описанияобъектов этого типа.Доступ к информационным членам и методам объекта , описаннымв открытой секции, осуществляется через объект или ссылку на объектс помощью операции выбора члена класса «.».Если работа с объектом выполняется с помощью указателя на объект, тодоступ к соответствующим членам класса осуществляется на основе указателя на член класса «−>»:class Х{public:char c;int f() {…}};int main (){Х x1;Х & x2 = x1;Х * p = & x1;int i, j, k;x1.c = ‘*’;i = x1.f();х1.с = '+';j = x2.f();x1.c = ‘#’;k = p -> f();…}Объекты класса можно определять совместно с описанием класса:class Y {…} y1, y2;3.3.
Классы и структуры С++Синтаксис класса в С++ совпадает с синтаксисом структуры С++:struct Имя_структуры { определение_членов_структуры };Класс С++ отличается от структуры С++ только определением поумолчанию первой области доступа в их описании (а также определением поумолчанию способа наследования, см. раздел 10.3):— для структур умолчанием является открытый доступ (public)— для классов умолчанием является закрытый доступ (private).Различия в умолчаниях связаны с различиями целей создания такихконструкций. Структуры создавались для объединения и совместного использования разнородных типов данных, например записей файлов.
Класспредназначен для определения полноценного типа данных.21Классы и объекты С++В C++ объекты можно создавать также на основе структури объединений (union).Структуру можно рассматривать как прообраз понятия класс. Изначально концепция структуры (например, в Си) служила исключительнообъединению разнородных данных в единой конструкции для совместнойобработки, то есть в понятии структуры присутствовала исключительно информационная составляющая. в С++ время в структуре могут бытьи функции-члены, в том числе и специальные члены — конструкторыи деструкторы, о которых будет рассказано в следующих разделах.
Структуры наравне с классами можно использовать для полноценного описаниятипов данных, включающего описания операций, применяемых к описываемому типу данных. Однако наличие информационных членов в открытойсекции нарушает один из основных принципов ООП — принцип инкапсуляции.3.4. Манипуляции с состояниемобъектаДля доступа к внутренним информационным членам объекта, созданного наоснове класса (чтение/запись), необходимо использовать специальные методы класса, называемые модификаторами (setters) и селекторами (getters).Они осуществляют подконтрольное считывание и изменение внутреннихинформационных членов. Так, если изменяется внутреннее информационноеполе size объекта класса stack, описывающее максимальный размер стека, тонеобходимо осуществить ряд действий по согласованному изменению другихинформационных членов (выделение дополнительной памяти и т.
д.):class stack{int* c1;int top, size;public:. . .int putnewsize ( int ns ){if ( top > ns ) return 1;int* nc1 = new int[ns];}if ( top > 0 )for ( int i = 0; i < top; ++I )nc1[i] = c1[i];delete c1;c1= nc1;size = ns;return 0;};Таким образом, изменение информационных полей объекта должноосуществляться специальными методами, производящими изменение требуемого информационного поля согласованно с одновременным изменениемдругих информационных полей.
Такие методы обеспечивают согласованность внутренних данных объекта.22Классы и объекты С++3.5. Класс как область видимостиКласс является областью видимости описанных в нем членов класса. Идентификатор члена класса локален по отношению к данному классу. Классымогут быть вложенными. Одноименные идентификаторы членов класса закрывают видимость соответствующих внешних идентификаторов.Операция «::» позволяет получить доступ к одноименным объектам,внешним по отношению к текущей области видимости, в частности, к глобальным функциям и переменным, следующим образом:имя_класса :: имя_члена_классаили для имен глобальных функций и переменных::: имяПример:int ia1;void f1 ( int b1 ){ia1 = ia1 + b1;}class x{int ia1;public:x() { ia1 = 0; }void f1 ( int b1 ){::f1(b1); // вызов глобальной функции}};int main(){x a2;a2.f1(2);return 0;}3.6.
Объявление и определениеметодов класса.Спецификатор «inline»Каждый метод класса, должен быть определен в программе. Определитьметод класса можно либо непосредственно в классе (если тело метода неслишком сложно и громоздко), либо вынести определение вне класса,а в классе только объявить соответствующий метод, указав его прототип.23Классы и объекты С++При определении метода класса вне класса для указания области видимости соответствующего имени метода используется операции «::»Пример:class x{int ia1;public:x() { ia1 = 0; }int func1();};int x::func1() { … return ia1; }Это позволяет повысить наглядность текста, особенно, в случае значительного объема кода в методах.
При определении метода вне классас использованием операции «::» прототипы объявления и определенияфункции должны совпадать.Метод класса и любую функцию, не связанную ни с каким классом,можно определить со спецификатором inline:inline int func1();Такие функции называются встроенными.Спецификатор inline указывает компилятору, что необходимо по возможности генерировать в точке вызова код функции, а не команды вызовафункции, находящейся в отдельном месте кода модуля. Это позволяетуменьшить время выполнения программы за счет отсутствия команд вызовафункции и возврата из функции, которые кроме передачи управления выполняют действия соответственно по сохранению и восстановлению контекста (содержимого основных регистров процессора).
При этом размермодуля оказывается увеличенным по сравнению с программой без спецификаторов inline. Следует отметить, что спецификатор inline является рекомендацией компилятору. Данный спецификатор неприменим для функций сосложной логикой. в случае невозможности использования спецификатора дляконкретной функции компилятор выдает предупреждающее сообщениеи обрабатывает функции стандартным способом.По определению методы класса, определенные непосредственнов классе, являются inline-функциям3.7.
Указатель «this»В классах С++ неявно введен специальный указатель this — указатель натекущий объект. Каждый метод класса при обращении к нему получаетданный указатель в качестве неявного параметра. Через него методы классамогут получить доступ к другим членам класса.Указатель this можно рассматривать как локальную константу, имеющую тип X*, если X — имя описываемого класса. Нет необходимости ис-24Классы и объекты С++пользовать его явно.
Он используется явно, например, в том случае, когдавыходным значением для метода является текущий объект.Данный указатель, как и другие указатели, может быть разыменован.При передаче возвращаемого значения метода класса в виде ссылки натекущий объект используется разыменованный указатель this, так как ссылка,как уже было указано, инициализируется непосредственным значением.Пример:class x{. . .public:x& f(. .