
- •5)Указатели и ссылки.
- •12) Параметры структурных типов.
- •13) Классы памяти переменных.
- •14) Параметры-функции.
- •15) Правила, определяющие видимость переменных в функциях.
- •16) Пространства имен.
- •Int Pages;
- •Int getPages(); // тело будет описано в book.Сpp
- •18) Перегрузка функций.
- •19) Функции с параметрами по умолчанию.
- •20) Текстовые файлы. Отличие от Delphi Pascal.
- •Int fscanf(file *stream,const char *format[,adress,...]);
- •Int fprintf(file *stream,const char *format[,argument,...]);
- •21) Двоичные файлы. Отличие от Delphi Pascal.
- •22) Определение класса, компоненты класса. Ограничение доступа.
- •23) Инициализация полей при отсутствии конструктора.
- •24) Конструкторы. Инициализация полей при наличии конструктора.
- •25) Деструкторы.
- •27) Простое и множественное наследование классов.
- •28) Наследование. Ограничение доступа при наследовании.
- •29) Конструкторы и деструкторы производных классов.
- •30) Композиция.
- •31)Наполнение
- •32) Полиморфное наследование. Простой полиморфизм.
- •33) Полиморфное наследование. Сложный полиморфизм.
- •34) Статические компоненты классов.
- •35) Особенности работы с динамическими объектами.
- •36) Объекты с динамическими полями. Копирующий конструктор.
- •Void Print(tPoint r) {…}
- •37) Дружественные функции, методы и классы.
- •38) Переопределение операций.
- •39) Шаблоны классов.
- •40) Шаблоны функций.
- •46) Сигналы, слоты и события Qt.
14) Параметры-функции.
int (*ptr)(int,int); объявляется указатель на функцию
а в процессе программы указателю уже присваивается какая-нибудь функция
switch (c) { case '+': ptr=add; c='-';break;
case '-': ptr=sub; c='*';break;
case '*': ptr=mul; c='/';break;
case '/': ptr=div; c=' '; }
15) Правила, определяющие видимость переменных в функциях.
Видимость переменных и функций в программе определяется следующими правилами.
1. Переменная, объявленная или определенная глобально, видима от точки объявления или определения до конца исходного файла. Можно сделать переменную видимой и в других исходных файлах, для чего в этих файлах следует ее объявить с классом памяти extern.
2. Переменная, объявленная или определенная локально, видима от точки объявления или определения до конца текущего блока. Такая переменная называется локальной.
3. Переменные из объемлющих блоков, включая переменные объявленные на глобальном уровне, видимы во внутренних блоках. Эту видимость называют вложенной. Если переменная, объявленная внутри блока, имеет то же имя, что и переменная, объявленная в объемлющем блоке, то это разные переменные, и переменная из объемлющего блока во внутреннем блоке будет невидимой.
4. Функции с классом памяти static видимы только в исходном файле, в котором они определены. Всякие другие функции видимы во всей программе.
16) Пространства имен.
Большинство приложений состоит более чем из одного исходного файла. При этом возникает вероятность дублирования имен, что препятствует сборке программы из частей. Для снятия проблемы в C++ был введен механизм логического разделения области глобальных имен программы, который получил название пространства имен.
Имена, определенные в пространстве имен, становятся локальными внутри него и могут использоваться независимо от имен, определенных в других пространствах. Таким образом, снимается требование уникальности имен программы.
namespaсe [<имя>] { <Объявления и определения> }
Имя пространства имен должно быть уникальным, но может быть и опущено. Если имя пространства опущено, то считается, что определено неименованное пространство имен, локальное внутри единицы трансляции. Для доступа к его ресурсам используется внутреннее имя $$$.
Например:
namespace ALPHA { // ALPHA – имя пространства имен
long double LD; // объявление переменной
float f(float y) { return y; } // описание функции
}
Пространство имен определяет область видимости, следовательно, функции, определенные в пространстве имен могут без ограничений использовать другие ресурсы, объявленные там же (переменные, типы и т.д.).
Доступ к элементам других пространств имен может осуществляться тремя способами:
1) с использованием квалификатора доступа, например:
ALPHA::LD или ALPHA::f()
2) с использованием объявления using, которое указывает, что некоторое имя доступно в другом пространстве имен:
namespace BETA { …
using ALPHA::LD;/* имя ALPHA::LD доступно в BETA*/ }
3) с использованием директивы using, которая объявляет все имена одного пространства имен доступными в другом пространстве:
namespace BETA { …
using ALPHA; /* все имена ALPHA доступны в BETA*/ }
Непоименованное пространство имен невидимо в других модулях: namespace { namespace-body }
При трансляции оно именуется как “unique”, доступное в самом модуле:
namespace unique { namespace-body }
using namespace unique;
17) Компоновка модулей С++. Защита от повторной компиляции.
Модули С++
Модуль C++ обычно включает два файла: заголовочный файл с расширением ≪.h≫ и файл реализации с расширением ≪.cpp≫.
Заголовочный файл играет роль интерфейсной секции модуля. В него помещают объявление экспортируемых ресурсов модуля:
· прототипы (заголовки) процедур и функций,
· объявление переменных, типов и констант.
Заголовочный файл подключают командой #include ″<Имя модуля>.h″, записываемой в файле реализации программы или другого модуля, если они используют ресурсы описываемого модуля.
Файл реализации представляет собой секцию реализации модуля. Он должен содержать команды подключения используемых модулей, описания экспортируемых процедур и
функций, а также объявление внутренних ресурсов модуля. Файл реализации подключаетcя командой #include ″<Имя модуля>.cpp″.
При создании первый (главный) файл проекта уже содержит заготовку основной функции программы – функции main(). Для создания файлов модуля и добавления их к проекту необходимо вновь вызвать многошаговый Мастер заготовок. Это делается с использованием команды меню File/New. Выполнение этой команды при открытом проекте вызовет открытие окна Мастера заготовок на вкладке Files, на которой необходимо выбрать тип файла, добавляемого к проекту.
/
/Файл
Book.h:
#ifndef book_h
#define book_h
class СBook{
public: char Name[30];