Главная » Просмотр файлов » Конспект лекций по С++

Конспект лекций по С++ (1018900), страница 10

Файл №1018900 Конспект лекций по С++ (Сборник литературы - С и С++) 10 страницаКонспект лекций по С++ (1018900) страница 102017-07-08СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 10)

Если строка короче, чем специфицированный размер массива, то оставшиеся элементы массива инициализируются нулем (символом \0).

Об"явления типов

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

Имя типа может быть использовано в об"явлениях переменных и функций в качестве ссылки на этот тип. Это полезно, когда многие переменные или функции имеют один и тот же тип.

Об"явление typedef определяет спецификатор типа для типа. Это об"явление используется для того, чтобы создавать более ко­роткие или более осмысленные имена типов уже определенных в Си или об"явленных пользователем.

Типы структур, совмещений и перечислений

Об"явления типов структур, совмещений и перечислений имеют ту же самую общую синтаксическую форму, как и об"явления перемен­ных этих типов. В об"явлении типа идентификатор переменной опу­щен, так как нет переменной которая об"является. Именем структу­ры, совмещения или перечисления является тег.

В об"явлении типа может появиться список об"явлений элемен­тов- <member-declaration-list> или список перечисления-

<enum-list>, определяющие тип.

Сокращенная форма об"явления переменной, в котором tag ссы­лается на тип, определенный где-то еще, при об"явлении типа не используется.

Примеры:

/******************** Example 1 ********************/

enum status {

loss = -1,

bye,

tie = 0,

win,

};

/********************* Example 2 *******************/

struct student {

char name[20];

int id, claas;

};

В первом примере об"является тип перечисления, поименован­ный status. Имя типа может быть использовано в об'явлениях пер­менных типа перечисления. Идентификатор loss явно устанавливается в -1. Идентификаторы bye и tie ассоциируются со значением 0, а win принимает значение 1. Во втором примере об"является структур­ный тип, поименованный student. Теперь можно использовать такое об"явление, как struct student employee, чтобы об"явить структур-

ную переменную employee типа student.

Об"явления typedef

Синтаксис:

typedef <type-spesifier><declarator>[,<declarator>...]; Об"явления typedef являются аналогом об"явления переменной,

за исключением того, что ключевое слово typedef заменяет специфи­катор класса памяти.

Об"явление интерпретируется тем же самым путем, как об"яв­ления переменной или функции, но <declarator> вместо того, чтобы стать переменной типа, специфицированного об"явлением, становится синонимом имени типа. Об"явление typedef не создает типов. Оно создает синонимы для существующих имен типов, которые были специ­фицированы другим способом. Любой тип может быть об"явлен с typedef, включая типы указателя, функции и массива. Имя с ключе­вым словом typedef для типов указателя, структуры или совмещения может быть об"явлено прежде чем эти типы будут определены, но в пределах видимости об"явления.

Примеры:

/******************** Example 1 ********************/

typedef int WHOLE;

/******************** Example 2 ********************/

typedef struct club {

char name[30];

int sise, year;

} GROUP;

/******************** Example 3 ********************/

typedef GROUP *PG;

/******************** Example 4 ********************/

typedef void DRAWE(int, int);

В первом примере об"является WHOLE как синоним для int .

Во втором примере об" является GROUP как структурный тип с тремя элементами. Так как специфицирован также тег clab, то имя GROUP и тег club могу быть использованы в об"явлениях.

В третьем примере используется предидущее имя typedef для об"явления адресного типа. Тип PG об"является как указатель на тип GROUP, который в свою очередь определен как структурный тип.

В последнем примере представлен тип DRAWE для функции не

возвращающей значения и требующей два аргумента типа int. Это оз­начает, например, что об"явление DRAWE box; эквивалентно об"явле­нию void box(int, int);

Имена типов

Имя типа специфицирует особенности типа данных. Имена типов используются в трех контекстах: в списках типов аргументов, при об"явлении функций, в вычислениях cast (преобразованиях типов), и в sizeof операциях. Списки типов аргументов рассматривались в

разделе 4.5. "Об"явления функций". Преобразования cast и операция sizeof обсуждаются в разделах 5.7.2. и 5.3.4. соответственно.

Именами для основных, перечисляющих, структурных и совмещающих типов являются спецификаторы типа для каждого из них. Имена для типов указателя, массива и функции задаются следующей синтакси­ческой формой:

<type-specifier><abstract-declarator>

Абстрактный декларатор <abstract-declarator>- это деклара­тор без идентификатора, состоящий из одного или более модификато­ров указателей, массивов и функций. Модификатор указателя (*) всегда появляется перед идентификатором в деклараторе, в то время как модификатор массива ([]) или функции ( () ) появляются после идентификатора. Таким образом, чтобы правильно интерпретировать абстрактный декларатор, нужно начинать интерпретацию с подразуме­ваемого идентификатора.

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

меваемый идентификатор внутри скобок, и в таком случае- это немо­дифицированный тип, или перед скобками, тогда- это тип функции. Спецификаторы типа, установленные посредством об"явлений typedef, также рассматриваются как имена типов.

Примеры:

long * /* Example 1 */

int (*) [5] /* Example 2 */

int (*) (void) /* Example 3 */

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

модифицируют составные абстрактные деклараторы. В примере 2 зада­но имя типа для указателя на массив иэ пяти злементов. В третьем примере именуется указатель на функцию, не требующую аргументов и возвращающую значение типа int.

КОНТРОЛЬНЫЕ ВОПРОСЫ:



1. Какие ошибки содержат следующие операторы?



enum State { on, off };

enum YesNo { yes, no};

enum DiskDriveStatus { on, off };



2. Верно или нет, что объявление следующего перечислимого типа неправильно?



enum YesNo { no = 0, No = 0, yes = 1, Yes = 1 };



3. Что не так в следующей программе?



#include <iostream.h>

int main()

{

int *p = new int;

cout << "Enter а number";

cin >> *p;

cout << "The square of " << *p << " = " << (*p * *p);

return 0;

}



Функции



Объявление и определение функций



- Общая форма определения функции такова:

возвращаемыйТип имяФункции(<список параметров>)

// обязателен тип возвращаемого значения

{

< объявление данных >



< тело функции>

return возвращаемоеЗначение; // - если возвращаемыйТип не void

}



- Выход из функции осуществляется по оператору return. Void-функции

могут не возвращать значения.



Список параметров:

[const] тип1 параметр1, [const] тип2 параметр2, ...



- Ключевое слово const предохраняет передаваемые по ссылке аргументы от случайного изменения.



Программа USERINFO.CPP иллюстрирует использование модификатора

// const в списке параметров

*/

struct userInfo

{

int age;

char name[150];

};

void processUserInfo(/*const*/ userInfo &ui)

// при снятии комментария будет сообщение об ошибке,

// поскольку модификатор const запрещает изменение параметра

{

if ( ui.age < 18 ) {

cout << "Значение параметра меньше 18" << endl;

return;

}

if ( ui.age < 21 )

ui.age = 21;

}

/*

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

возврТип имяФункции(<список параметров>);

При объявлении функции имена параметров могут быть опущены.

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

[const] тип1& параметр1, [const] тип2& параметр2, ...

void foo(int &); // - объявление функции - это ее прототип

int main()

{

int value = 5;

foo(value);

cout << value << endl;

return 0;

}

void foo(int &parm) // - определение функции вызов параметра по ссылке

{

++parm;

}

/* Результаты:

6

*/



void foo(int *); // пердача указателя

int main()

{

int value = 5;

foo(&value); // передается адрес

cout << value << endl;

getch();

foo(&value);

cout << value << endl;

getch();

return 0;

}

void foo(int* parm)

{

++*parm; // параметр - указатель

}

/* Результаты:

6

7



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



Программа LOCAL.CPP знакомит с понятием локальной переменной

- Ключевое слово static позволяет объявить переменную как статическую.

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



Программа STATIC.CPP знакомит с понятием статической локальной переменной

- Макроопределения позволяют вам вводить компактные псевдо-функции, принимающие любые типы данных, поскольку компилятор не выполняет в этом случае проверку типов:

#define min(n1, n2) (((n1) < (n2)) ? (n1) : (n2))

#define max(n1, n2) (((n1) > (n2)) ? (n1) : (n2))

double num1 = 50, num2 = 5, rslt;

rslt = min(num1 / 2, num2 * 2);



- При объявлении функции с модификатором inline компилятор заменяет вызов функции ее телом. В этом смысле эти функции похожи на макросы.

Отличие состоит в том, что встроенные функции выполняют проверку типов данных.

Программа INLINE.CPP, иллюстрирующая применение встроенной функции

- Используя аргументы по умолчанию для некоторых параметров, при вызове функции вы можете не задавать аргументы для этих параметров; тогда им автоматически будут присваиваться значения по умолчанию.

Программа DEFARGS.CPP, иллюстрирующая применение аргументов по умолчанию

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

Пример программы FACTOR.CPP, использующей рекурсивную функцию

Характеристики

Тип файла
Документ
Размер
656 Kb
Тип материала
Высшее учебное заведение

Список файлов книги

С и С++ - сборник литературы
C++ Бархатный путь - Марченко А
cpp_001.shtml
cpp_002.shtml
cpp_003.shtml
cpp_004.shtml
cpp_005.shtml
cpp_006.shtml
cpp_007.shtml
cpp_008.shtml
cpp_009.shtml
cpp_010.shtml
cpp_011.shtml
cpp_012.shtml
cpp_013.shtml
cpp_014.shtml
cpp_015.shtml
cpp_016.shtml
cpp_017.shtml
cpp_018.shtml
cpp_019.shtml
cpp_020.shtml
cpp_021.shtml
cpp_022.shtml
cpp_023.shtml
cpp_024.shtml
cpp_025.shtml
cpp_026.shtml
cpp_027.shtml
cpp_030.shtml
cpp_034.shtml
Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7045
Авторов
на СтудИзбе
259
Средний доход
с одного платного файла
Обучение Подробнее