Параметры функции по умолчанию



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

 

Массив можно передать только по ссылке

 

Реализация рекурсивных вызовов функции в практике программирования опирается на механизм «стека вызовов» (адрес возврата и локальны переменные функции записываются в стек)

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

Оборотной стороной этого довольно простого по структуре механизма является то, что на каждый рекурсивный вызов механизма требуется время и некоторое кол-во ОЗУ ПК. Поэтому при чрезмерной большой глубине рекурсии будет потрачено достаточно много времени и может наступить переполнение стека. В следствии этого при реализации рекурсивного алгоритма следует по возможности минимизировать кол-во рекурсивных вызовов и размер данных передаваемых в них.

Массив – это упорядоченная структура данных содержащая набор переменных (объектов одного типа и имеющая имя). Кол-во хранящихся в массиве элементов называется размер массива

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

 

16.03.18:Обращение к отдельным элементам массива осуществляется с помощью индексов, которые указываются в квадратных скобках после имени массива

Контроль коррекции индексов (чтобы они не вышли за диапазон) лежит на программисте

Интегрированная среда VisualStudio предлагает пользователю еще один вид массивов отличающаяся от родного массива тем, что память под массив среды разработки выделяется в динамической памяти. Такие массивы обладают широкими встроенными возможностями, которых нет в массивах родного С++. Объявление такого массива выполняется с помощью ключевого слова Raid с указанием типа массива в угловых скобках.

 

23.03.18:
Указатели

Каждая область памяти, которая используется для хранения данных, имеет свой адрес. Адрес позволяет обращаться к определенному элементу данных.
Указатель – переменная, которая хранит адрес другой переменной определенного типа (для 32-ухРазрядных ЭВМ адрес содержит четырехбайтное целое число без знака, а для 64-ехРазрядных – восьмибайтное целое число без знака).

Переменная-указатель обладает именем, а также имеет тип, определяющий то, на какого рода данные она может указывать.
Объявления указателей подобны объявлению обычных переменных за исключением того, что имя дополняется впереди звездочкой, свидетельствующей о том, что данная переменная является указателем.
Формат объявления указателя имеет следующий вид:
<Тип><Переменная>

Допускается смешивание объявлений обычных переменных и указателей в одном операторе, однако в этом случае звездочка всегда относится к имени переменной. Желательно называть указатели именами, начинающимися с буквы «p» - это упрощает восприятие кода. При каждом вложении указывается дополнительная звездочка, количество таких вложений указателей не ограничено, однако как правило ограничиваются только указателем на указатель.

Оператор получения адреса

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

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


Инициализация указателей

Перед использованием указателя он должен быть инициализирован.
Инициализация осуществляется аналогично инициализации переменных, но в качестве инициализирующего значения используется адрес ранее объявленной переменной.
Использование НЕинициализированных указателей чрезвычайно опасно – с помощью такого указателя можно, не желая того, перезаписать произвольную область памяти. Нанесенный при этом ущерб зависит лишь от степени вашего везения.
Допускается инициализация указателя значением, эквивалентным нулю. Этот литерал может быть неявно преобразован в любой ссылочный тип, но, с другой стороны, ни в один целочисленный тип, кроме типа Bool. И, поскольку этот литерал может быть неявно преобразован в тип Bool, можно проверить состояние указателя.
Указатели, объявленные в глобальной области видимости, а также статические локальные указатели автоматически получают значение 0, а указатели, которые объявлены в локальной области видимости, будут иметь произвольное значение (т.е. мусор).

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

Для доступа к данным используется оператор косвенного доступа (оператор разыменования указателя). При этом происходит обращение к данным, но не напрямую, а косвенно, через указатель на них.

 

Указатели на тип Char

При инициализации указателя ему можно присвоить не только числовое значение. Например, указатель на тип Char может быть инициализирован строковым оператором. Это похоже на инициализацию массива типа Char, но есть небольшое отличие: создается строковый литерал, содержащий символьную строку, заключенную в кавычки, и ограниченный символом «\0», а её адрес присваивается указателю.
Таким образом, адресом литерала будет адрес его первого символа.

 

Массивы указателей

Указатели можно сохранять в массиве. При объявлении массива указателей используется следующий синтаксис:
<Тип><Название массива> [<Количество элементов>];

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

 

30.03.18:С++ позволяет создавать собственный набор именованных констант, называемый перечислением. Объявление такого типа данных осуществляется с помощью ключевого слова enum при этом задается список перечисления, состоящий из набора именованных констант, определяющих все возможные значения, которые могут быть назначены переменной данного типа. Например, если в программе ведется работа с днями неделями, то можно создать новый тип с именем Day, а далее назначить ей одно из значений, предусмотренных этим типом. Использование такого типа данных способствует удобочитаемости кода, и кроме того снижает вероятность назначения переменной недопустимого или неожидаемого значения

 

06.04.18:OpenFile не предназначен для изменения файла, он используется исключительно для получения полного имени(пути) файла

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

Указанный класс предоставляет различные методы для создания, открытия, переименования, копирования, перемещения, и удаления файлов, а также чтения, записи и добавления данных в них.

Методы класса File можно также использовать для получения и задания атрибутов или сведений, связанных с созданием файла доступом к нему и записью. Для всех методов требуется указывать путь к файлу. Все методы класса File являются статическими, поэтому выполняют проверку безопасности для всех файловых операций. А не аналогичного метода класса FileInfo. Если действие необходимо выполнять неоднократно, то рекомендуется использовать соответствующий метод класса FileInfo. Проверка безопасности будет проводиться не всегда.  Запишите очередной вопрос, который мы рассмотрим в след раз, а пока старосты проверьте присутствующих.

 


09.04.18:Путь может содержать абсолютные или относительные сведения о размещении. В абсолютном пути размещение указывается полностью. То есть файл или каталог может быть однозначно определен независимо от текущего размещения. В относительном пути указывается неполное размещение, т.е. при поиске файла по указанному относительному пути в качестве начальной точки указывается текущее размещение. Directory::GetCurrentDirrectory (System::IO::Path)

Не взаимодействует с файловой системой и не проверяет существование файла, указанного строкой пути. Члены этого класса изменяют лишь строку пути и не оказывают влияния на имена файлов. Лишь проверяют содержимое указанной строки пути на предмет наличия в ней недопустимых символов. Если файловые операции необходимо выполнять неоднократно, рекомендуется использовать метод FileInfo вместо соответствующих статических методом класса File

 Класс DriveInfo. Этот класс моделирует дисковое устройство и предоставляет свойство и методы для получения сведений о диске. Например, этот класс используется для определения того, какие диски доступны и какого они типа. Так же можно запросить сведения объема диска и объема свободного пространства на нём.

Класс FileStream для работы с файлами. Методы этого класса предназначены для открытия и закрытия файлов, операции чтения и записи файлов. Объекты FileStream поддерживают прямой доступ к файлам с использования …. Перемещать позицию чтения/записи в любое место внутри файла. Использование синхронных (read/write) или асинхронных методов (BeginRead/BeginWriteandReadandWrite) влияет на производительность программ. Асинхронные методы используются для выполнения ресурсоёмких файловых операций без блокирования основного потока. Это особенно важно в тех приложениях, в которых длительные файловые операции могут блокировать поток пользовательского интерфейса и создать впечатление, что наше приложение зависло, поэтому для достижения лучшей производительности функция буферизирует чё-то там…

Пользовательский интерфейс – внешняя оболочка приложения вместе с программами управления доступом и другими скрытыми от пользователя механизмами управления, дающая возможность работать с документами, данными и другой информацией, хранящийся в компьютере или за его пределами. Одной из главных целей любого приложения является обеспечение максимального удобства и эффективности работы с информацией (документами, БД, графикой и тд) Следует руководствоваться следующими принципами:

1) Стандартизация. Рекомендуется использовать стандартные, проверенные многими программистами и пользователями. Причем в качестве стандарта могут служить приложения всем известные программы (Word, Excel и тд). Под решениями подразумевается дизайн форм, взаимное расположение, значки на кнопках, названия команд меню и тд.

2) Удобство и простота работы.

 


20.04.18:Модальность диалоговых окон. Бывают модальные и немодальные.

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

Немодальное окно– это позволяющее перемещать фокус на другое окно или форму без закрытия текущего окна. Такой тип окон используется гораздо реже, чем модальное.

Создание собственных диалоговых окон для этого необходимо создать форму и задать ей свойства ControlBox&MinimizeBox&MaximizeBox - false; Modal – true; Если TopMost – true, то диалоговое окно будет располагаться поверх всех окон на экране

Есть 2 варианта модальности – на уровне приложения и на уровне системы. Свойство TopMost отвечает за то, будет ли модальность на уровне системы, т.е если true, то модальность на уровне системы и окно будет поверх всех окон.

Поведение стандартных кнопок несколько изменилось. Например, свойство default&cancel не поддерживаются, поэтому соответствующие кнопки назначаются элементом AcceptButton&CancelButton.

После вызова метода ShowDialog программа может узнать какая кнопка была нажата на форме с помощью свойства DialogResult

Использование стандартных элементов управления

 

ААА страшна вырубай

ООП – объектно-ориентированное программирование, методология разработки программ, основанная на представлении программы в виде совокупностей объектов каждый из которых является реализацией определенного класса. Все объекты и классы характеризуются набором свойств, методов и событий. Эти объекты характеризуются некоторыми свойствами, способны выполнять определенные методы и генерировать события. Класс является описанием объекта в то время как объект является конкретным представителем (экземпляром) определенного класса. Например, понятие «автомобиль» описывает целый класс объектов, которые имеют 4 колеса, сиденья, руль и умеют передвигаться. В то же время каждый конкретный автомобиль является объектом со своими размерами этих колес, количеством сидения, положением руля и скоростью передвижения.

Основные принципы ООП: абстрагирование, инкапсуляция, наследование и полиморфизм

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

Инкапсуляция. Объекты позволяют значительно упростить разработку приложений. В очень редких случаях разработчика интересует внутренняя реализация объекта. Главное, чтобы объект реализовывал функции, которые он должен предоставлять. Если вы хотите снять деньги со счета через банкомат, то без банковской карты это невозможно, т.к. содержимое банкомата защищено от доступа случайного клиента. Другими словами, они инкапсулированы. В ООП интерфейсами объектов отличаются свойства, методы и события.    …..     Если есть класс, предоставляющий возможность скачать файл из интернета, то все функции соединения с сервером, проведения обмена, закрытия связи, а также все используемые для этого переменные должны быть скрыты внутри этого класса. Нет никакой необходимости пользователям класса видеть все детали его реализации. В любом крупном проекте постоянные изменения приводят к тому, что в любой момент времени детали реализации класса могут измениться и все разработчики, которые использовали данные детали реализации класса обнаружат свой код в нерабочем состоянии и отследить это невозможно. Инкапсуляция кода внутри класса приведет к тому, что изменение деталей реализации отдельных классов не приведет к прекращению правильного функционирования программ, использующих эти классы. Для расширения функциональности классов следует использовать наследование и полиморфизм.

 

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

 

Полиморфизм

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

 

 

Объекты

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

Объект характеризуется следующими основными понятиями:

- Состояние: каждый объект всегда находится в определенном состоянии, которое характеризуется набором свойств объекта. Под воздействием событий объект переходит в другое состояние (изменяется значение его свойств). При этом объект может сам генерировать события, при переходе в другое состояние

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

- Метод: Это процедура или функция, которая реализует возможные с объектом действия.

- События: Это средства взаимодействия объектов с друг с другом. Объекты генерируют заданные события и выполняют действия в ответ на заданные события. Анализ и обработка событий позволяют объекту реагировать на внешние воздействия. События – аналог сообщений, отправляемых или получаемых объектами

 

Классы

Объекты, имеющие общие свойства и поведение объединяются в классы. Поэтому класс можно определить, как некую общность конкретных объектов или как описание объектов (т.е. каким он должен быть и что должен делать). Если объекты существуют в приложении (во время их выполнения), то класс — это абстракция, объединяющая объекты в одну группу, согласно их свойству и поведению в среде окружения, в которой они существуют и взаимодействуют. Таким образом классы не существуют в работающих приложениях. Классы используются в качестве шаблонов объектов. С их помощью во время выполнения программы можно создавать любое количество объектов одного класса. Внутренняя структура класса передается объекту посредством модуля класса. Таким образом класс описывает семейство объектов. Каждый экземпляр класса является уникальным представителем этого семейства.

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

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

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

Свойства представляют собой синтаксическую надстройку, позволяющую осуществлять в форме вызов функции, аналогичный чтению или записи переменной. И тем самым обеспечивает инкапсуляцию объектов. Например, можно объявить свойство возраст для объекта человек и, при попытке в него записать отрицательное значение, выводить ошибку. Свойства классов во многом подобны полям. Т.е. свойства, как и поля, могут участвовать в выражении. Принципиальным отличием полей от свойств является то, что при обращении к свойствам в общем случае автоматически задействуются 2 специальных метода set и get. Методы — это процедуры, выполняющие определенные действия над объектом или классом. Методы могут иметь параметры и могут возвращать значения. События позволяют классам автоматически реагировать на действия пользователя и изменения в состоянии программы (объектов). Объекты позволяют вызывать методы других объектов, подписавшихся на данное событие. Например, подписавшись на событие «Нажатие объекта кнопка», подписавшийся объект каждый раз при нажатии этой кнопки будет получать уведомление в виде вызова соответствующего метода. Объекты классов, обладающих всеми свойствами, методами и событиями, которые определены в исходном классе. Каждый объект класса может иметь различные значения свойств и функционировать независимо от других.

…. Все модификаторы доступа могут использоваться любое количество раз и в любом порядке, а могут и вообще отсутствовать. Модификаторы доступа могут сопровождать определение как класса, так и его членов. Они указывают область их видимости от открытых (глобальных) до закрытых (локальных, приватных). По умолчанию класс и его члены считаются закрытыми. Подобное управление доступом помогает предотвратить использование объектов в неправомерных целях.

Внутри одного класса допускается использование объектов другого класса.

 


Дата добавления: 2018-06-27; просмотров: 325; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!