Лекция 2. Модульное...

46
Начало Решаемые задачи Реализация в C ++ Создание заголовочных файлов Название Лекция 2. Модульное программирование Объектно-ориентированное программирование на C ++ 7 сентября 2009 г. Лекция 2 1 / 17

Transcript of Лекция 2. Модульное...

Page 1: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файловНазвание

Лекция 2. Модульное программированиеОбъектно-ориентированное программирование на C++

7 сентября 2009 г.

Лекция 2 1 / 17

Page 2: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

ПроблемыПравила применения

Проблемы при разработке ПО

Проблемы, возникающие при работе над крупными проектами

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

Технология модульного программирования включаетподдержку со стороны языка;набор правил для разработчиков.

Лекция 2 2 / 17

Page 3: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

ПроблемыПравила применения

Проблемы при разработке ПО

Проблемы, возникающие при работе над крупными проектами

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

Технология модульного программирования включаетподдержку со стороны языка;набор правил для разработчиков.

Лекция 2 2 / 17

Page 4: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

ПроблемыПравила применения

Проблемы при разработке ПО

Проблемы, возникающие при работе над крупными проектами

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

Технология модульного программирования включаетподдержку со стороны языка;набор правил для разработчиков.

Лекция 2 2 / 17

Page 5: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

ПроблемыПравила применения

Проблемы при разработке ПО

Проблемы, возникающие при работе над крупными проектами

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

Технология модульного программирования включаетподдержку со стороны языка;набор правил для разработчиков.

Лекция 2 2 / 17

Page 6: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

ПроблемыПравила применения

Проблемы при разработке ПО

Проблемы, возникающие при работе над крупными проектами

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

Технология модульного программирования включаетподдержку со стороны языка;набор правил для разработчиков.

Лекция 2 2 / 17

Page 7: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

ПроблемыПравила применения

Проблемы при разработке ПО

Проблемы, возникающие при работе над крупными проектами

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

Технология модульного программирования включаетподдержку со стороны языка;набор правил для разработчиков.

Лекция 2 2 / 17

Page 8: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

ПроблемыПравила применения

Модульный подход к проектированию ПО

исходныемодули компиляция объектные

модули

. . . . . . . . .

*.c,*.cpp,*.pas

*.obj,*.o,*.tpu

сборка(link)

*.lib,*.a,*.tpl

исполняемыймодуль

*.exe,*.app,*.dll

Рис. 1: Схема модульного подхода

Лекция 2 3 / 17

Page 9: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

ПроблемыПравила применения

Модульный подход к проектированию ПО

исходныемодули компиляция объектные

модули

. . . . . . . . .

*.c,*.cpp,*.pas

*.obj,*.o,*.tpu

сборка(link)

*.lib,*.a,*.tpl

исполняемыймодуль

*.exe,*.app,*.dll

Рис. 1: Схема модульного подхода

Лекция 2 3 / 17

Page 10: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

ПроблемыПравила применения

Модульный подход к проектированию ПО

исходныемодули компиляция объектные

модули

. . . . . . . . .

*.c,*.cpp,*.pas

*.obj,*.o,*.tpu

сборка(link)

*.lib,*.a,*.tpl

исполняемыймодуль

*.exe,*.app,*.dll

Рис. 1: Схема модульного подхода

Лекция 2 3 / 17

Page 11: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

ПроблемыПравила применения

Модульный подход к проектированию ПО

исходныемодули компиляция объектные

модули

. . . . . . . . .

*.c,*.cpp,*.pas

*.obj,*.o,*.tpu

сборка(link)

*.lib,*.a,*.tpl

исполняемыймодуль

*.exe,*.app,*.dll

Рис. 1: Схема модульного подхода

Лекция 2 3 / 17

Page 12: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

ПроблемыПравила применения

Модульный подход к проектированию ПО

исходныемодули компиляция объектные

модули

. . . . . . . . .

*.c,*.cpp,*.pas

*.obj,*.o,*.tpu

сборка(link)

*.lib,*.a,*.tpl

исполняемыймодуль

*.exe,*.app,*.dll

Рис. 1: Схема модульного подхода

Лекция 2 3 / 17

Page 13: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

ПроблемыПравила применения

Модульный подход к проектированию ПО

исходныемодули компиляция объектные

модули

. . . . . . . . .

*.c,*.cpp,*.pas

*.obj,*.o,*.tpu

сборка(link)

*.lib,*.a,*.tpl

исполняемыймодуль

*.exe,*.app,*.dll

Рис. 1: Схема модульного подхода

Лекция 2 3 / 17

Page 14: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

ПроблемыПравила применения

Модульный подход к проектированию ПО

исходныемодули компиляция объектные

модули

. . . . . . . . .

*.c,*.cpp,*.pas

*.obj,*.o,*.tpu

сборка(link)

*.lib,*.a,*.tpl

исполняемыймодуль

*.exe,*.app,*.dll

Рис. 1: Схема модульного подхода

Лекция 2 3 / 17

Page 15: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

ПроблемыПравила применения

Правила для разработчиков

Правила создания транслируемых модулей

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

Лекция 2 4 / 17

Page 16: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

ПроблемыПравила применения

Правила для разработчиков

Правила создания транслируемых модулей

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

Лекция 2 4 / 17

Page 17: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

ПроблемыПравила применения

Правила для разработчиков

Правила создания транслируемых модулей

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

Лекция 2 4 / 17

Page 18: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

ОпределенияИспользование в программе

Объявления и определения

Определение (объявление)

Объявление (declaration) — вводит новые имена в транслируемый модуль илиповторно вводит имена, введённые в предыдущих объявлениях.Может быть одновременно определением (definition) этих имён.

Лекция 2 5 / 17

Page 19: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

ОпределенияИспользование в программе

Объявления функций

Объявление функции, не являющееся определением

Заголовок функции, после которого идёт символ «;» является объявлением,но не определением.

Пример (объявление)

void Inc(int &rn);

Лекция 2 6 / 17

Page 20: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

ОпределенияИспользование в программе

Определения функций

Определение функции

Заголовок функции, после которого идёт её тело в фигурных скобках,является определением.

Примеры (объявление и определение)

void Inc(int &rn){++ rn;

}

Лекция 2 7 / 17

Page 21: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

ОпределенияИспользование в программе

Область действия и связь

Определение (область действия и связь)

Область действия (scope) — для имени— часть программы, в которой ономожет использоваться и означает одно и то же.

Связь (linkage) — свойство имени, позволяющее означать то же самоев другой области, если в ней дать его (повторное) объявление.

Лекция 2 8 / 17

Page 22: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

ОпределенияИспользование в программе

Область действия и связь

Определение (область действия и связь)

Область действия (scope) — для имени— часть программы, в которой ономожет использоваться и означает одно и то же.

Связь (linkage) — свойство имени, позволяющее означать то же самоев другой области, если в ней дать его (повторное) объявление.

Лекция 2 8 / 17

Page 23: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

ОпределенияИспользование в программе

Применение средств модульного программирования

f.cpp

// . . .

extern void f(){

// . . .}

f.h

void f();

g.cpp

// . . .

void g(){

// . . .f();// . . .

}

Лекция 2 9 / 17

Page 24: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

ОпределенияИспользование в программе

Применение средств модульного программирования

f.cpp

// . . .

void f(){

// . . .}

f.h

void f();

g.cpp

// . . .

void g(){

// . . .f();// . . .

}

Лекция 2 9 / 17

Page 25: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

ОпределенияИспользование в программе

Применение средств модульного программирования

f.cpp

// . . .

void f(){

// . . .}

f.h

void f();

g.cpp

void f();

// . . .

void g(){

// . . .f();// . . .

}

Лекция 2 9 / 17

Page 26: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

ОпределенияИспользование в программе

Применение средств модульного программирования

f.cpp

// . . .

void f(){

// . . .}

f.h

void f();

g.cpp

#include "f.h"

// . . .

void g(){

// . . .f();// . . .

}

Лекция 2 9 / 17

Page 27: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

Общие правилаПравила для CПравила для C++

Правила создания заголовочных файлов

Правила

Помещаются объявления и определения, необходимыев нескольких транслируемых модулях.Стандартное расширение (h, hpp).В начале и конце вставляются директивы препроцессора,предотвращающие включение содержимого файла при его повторномподключении:

Лекция 2 10 / 17

Page 28: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

Общие правилаПравила для CПравила для C++

Правила создания заголовочных файлов

Правила

Помещаются объявления и определения, необходимыев нескольких транслируемых модулях.Стандартное расширение (h, hpp).В начале и конце вставляются директивы препроцессора,предотвращающие включение содержимого файла при его повторномподключении:

Лекция 2 10 / 17

Page 29: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

Общие правилаПравила для CПравила для C++

Правила создания заголовочных файлов

Правила

Помещаются объявления и определения, необходимыев нескольких транслируемых модулях.Стандартное расширение (h, hpp).В начале и конце вставляются директивы препроцессора,предотвращающие включение содержимого файла при его повторномподключении:

Лекция 2 10 / 17

Page 30: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

Общие правилаПравила для CПравила для C++

Правила создания заголовочных файлов (пример)

Пример

/∗mydefs.h: My definitions

∗/

#ifndef MYDEFS_H__#define MYDEFS_H__

/∗ Здесь идут некоторые объявления и определения ∗/

#endif /∗ MYDEFS_H__ ∗/

Лекция 2 11 / 17

Page 31: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

Общие правилаПравила для CПравила для C++

Правила создания заголовочных файлов (продолжение)

Правила (продолжение)

Объявления и определения должны быть идентичными для всехтранслируемых модулей.

Пример (b.h)

struct Data{int m_n1;

#ifdef INCLUDED_FROM_B_CPPint m_n2, m_n3, m_n4;

#endif};void f(Data d);

Лекция 2 12 / 17

Page 32: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

Общие правилаПравила для CПравила для C++

Правила создания заголовочных файлов (продолжение)

Правила (продолжение)

Объявления и определения должны быть идентичными для всехтранслируемых модулей.

Пример (b.h)

struct Data{int m_n1;

#ifdef INCLUDED_FROM_B_CPPint m_n2, m_n3, m_n4;

#endif};void f(Data d);

Лекция 2 12 / 17

Page 33: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

Общие правилаПравила для CПравила для C++

Правила создания заголовочных файлов (продолжение)

a.cpp

#include "b.h"

int main(){

Data d;f(d);// . . .

}

b.cpp

#define INCLUDED_FROM_B_CPP#include "b.h"

void f(Data d){

// . . .d.m_n4 = 4;

}

Лекция 2 13 / 17

Page 34: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

Общие правилаПравила для CПравила для C++

Правила создания заголовочных файлов (окончание)

Правила (окончание)

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

Лекция 2 14 / 17

Page 35: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

Общие правилаПравила для CПравила для C++

Объекты, помещаемые, в заголовочные файлы (C)

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

Пример

#define PI 3.1415926

Лекция 2 15 / 17

Page 36: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

Общие правилаПравила для CПравила для C++

Объекты, помещаемые, в заголовочные файлы (C)

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

Пример

struct Hidden;

struct Data{

// . . .Hidden *m_pHidden;

};

Лекция 2 15 / 17

Page 37: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

Общие правилаПравила для CПравила для C++

Объекты, помещаемые, в заголовочные файлы (C)

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

Пример

struct Hidden;

struct Data{

// . . .Hidden *m_pHidden;

};

Лекция 2 15 / 17

Page 38: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

Общие правилаПравила для CПравила для C++

Объекты, помещаемые, в заголовочные файлы (C)

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

Пример

double my_fast_sin(double d);

Лекция 2 15 / 17

Page 39: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

Общие правилаПравила для CПравила для C++

Объекты, помещаемые, в заголовочные файлы (C)

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

Пример

#include <stddef.h>

/∗size_t определён в stddef .h

∗/

size_t get_size();

Лекция 2 15 / 17

Page 40: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

Общие правилаПравила для CПравила для C++

Объекты, помещаемые, в заголовочные файлы (C++)

Помещаемые объектыОпределения констант.Определения встроенныхфункций (inline).Объявления шаблонов, длякоторых не нужно полноеопределение.Определения всех остальныхшаблонов.Пространства имён(namespace, могут бытьвложены) кромемакроопределений.

Пример

const double cdPi = 3.1415926;

Лекция 2 16 / 17

Page 41: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

Общие правилаПравила для CПравила для C++

Объекты, помещаемые, в заголовочные файлы (C++)

Помещаемые объектыОпределения констант.Определения встроенныхфункций (inline).Объявления шаблонов, длякоторых не нужно полноеопределение.Определения всех остальныхшаблонов.Пространства имён(namespace, могут бытьвложены) кромемакроопределений.

Пример

inline void Inc(int &rn){++ rn;

}

Лекция 2 16 / 17

Page 42: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

Общие правилаПравила для CПравила для C++

Объекты, помещаемые, в заголовочные файлы (C++)

Помещаемые объектыОпределения констант.Определения встроенныхфункций (inline).Объявления шаблонов, длякоторых не нужно полноеопределение.Определения всех остальныхшаблонов.Пространства имён(namespace, могут бытьвложены) кромемакроопределений.

Пример

template <class T>struct Hidden;

template <class T>struct Data

{// . . .Hidden <T> *m_pHidden;

};

Лекция 2 16 / 17

Page 43: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

Общие правилаПравила для CПравила для C++

Объекты, помещаемые, в заголовочные файлы (C++)

Помещаемые объектыОпределения констант.Определения встроенныхфункций (inline).Объявления шаблонов, длякоторых не нужно полноеопределение.Определения всех остальныхшаблонов.Пространства имён(namespace, могут бытьвложены) кромемакроопределений.

Пример

template <class T>struct Hidden;

template <class T>struct Data

{// . . .Hidden <T> *m_pHidden;

};

Лекция 2 16 / 17

Page 44: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

Общие правилаПравила для CПравила для C++

Объекты, помещаемые, в заголовочные файлы (C++)

Помещаемые объектыОпределения констант.Определения встроенныхфункций (inline).Объявления шаблонов, длякоторых не нужно полноеопределение.Определения всех остальныхшаблонов.Пространства имён(namespace, могут бытьвложены) кромемакроопределений.

Пример

namespace mylib{const double cdPi = 3.1415926;//double my_fast_sin(double d);//// . . .

}

Лекция 2 16 / 17

Page 45: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

Общие правилаПравила для CПравила для C++

Правила для пространств имён

ЗамечанияПространство имён std зарезервировано для стандартной библиотеки,в нём нельзя ничего объявлять.Не принято помещать в заголовочные файлы директивы using(using namespace x;), также в ограниченных случаях следуетиспользовать объявления using (using x::f;).

Лекция 2 17 / 17

Page 46: Лекция 2. Модульное программированиеstaff.mmcs.sfedu.ru/~dubrov/files/sl_oop_02_module.pdf · Начало Решаемые задачи Реализация

НачалоРешаемые задачиРеализация в C ++

Создание заголовочных файлов

Общие правилаПравила для CПравила для C++

Правила для пространств имён

ЗамечанияПространство имён std зарезервировано для стандартной библиотеки,в нём нельзя ничего объявлять.Не принято помещать в заголовочные файлы директивы using(using namespace x;), также в ограниченных случаях следуетиспользовать объявления using (using x::f;).

Лекция 2 17 / 17