- •1. Дополнения к с
- •1.1. Комментарии
- •1.2. Ключевые слова
- •1.3. Константы
- •1.4. Блочные объявления
- •1.5. Ссылки
- •1.6. Новая роль имён перечислений, структур и объединений
- •1.7. Распределение памяти
- •1.8. Встраиваемые функции
- •1.9. Перегрузка функций
- •1.10. Задание для параметров функции значений по умолчанию
- •1.11. Дополнительные операции для доступа к данным
- •1.12. Предопределённые потоки ввода-вывода
- •2.1. Инкапсуляция
- •2.2. Разграничение доступа (скрытие данных и методов)
- •2.3. Друзья классов
- •2.4. Конструкторы и деструкторы
- •2.5. Конструктор по умолчанию
- •2.6. Конструктор копирования
- •2.7. Несколько слов о деструкторах
- •2.8. Перегрузка операций
- •3.1. Наследование
- •3.2. Виртуальные функции –полиморфизм
- •3.3. Шаблоны
1.11. Дополнительные операции для доступа к данным
В С++ определены следующие три дополнительные операции:
:: Уточнение области действия
.* Прямое обращение к компоненту класса
->* Косвенное обращение к компоненту класса
Для устранения конфликта имён используется новая операция уточнения области действия – ::. В языке С доступ к глобальной переменной был закрыт, если локальная и глобальная переменные имели одинаковые имена. В С++ доступ к ней возможен путем применения операции:
int iVariable; // Глобальная переменная void MyFunc ()
{
int iVariable; // Локальная переменная
:: iVariable++; // Увеличиваем значение глобальной переменной
. . .
iVariable—; // Уменьшаем значение локальной переменной
. . .
}
Эта операция может применяться также к статическим (static) компонентам структур и классов.
Операция прямого обращения к компоненту класса – .* устанавливает указатели так, что в результате выполнения операции они указывают на компоненты данного класса:
(ptrToObject.*memberFunc)(7); //Вызывает метод memberFunc для объекта,
// на который указывает ptrToObject
Операция косвенного обращения к компоненту класса – ->* устанавливает указатели так, что в результате выполнения операции они указывают на указатели компонентов данного класса:
(ptrToObject->*ptrToMemberFunc)(7); // Вызывает метод ptrToMemberFunc для
// обьекта, на который указывает ptrToObject:
1.12. Предопределённые потоки ввода-вывода
В язык С++ включены дополнительные предопределенные потоки. Для терминального и файлового ввода/вывода предусмотрены три стандартных потока: cin, cout и cerr.. Эта возможность позволяет легко настроить операции ввода/вывода в соответствии с требованиями приложения:
. . .
float sm = 0;
cout « "сантиметры = "; // Выводим строку в поток cout cin » sm; // Получаем значение из потока cin
cout « sm « " см соответствуют " « sm / 2.54 « "дюймам";
. . .
В результате выполнения последней строки приведенного фрагмента на экран будет выведена, например, следующая строка:
17.78 см соответствуют 7 дюймам
После того как мы познакомились с усовершенствованиями, внесенными в язык С, можно переходить к фундаментальным новшествам этого мощнейшего и очень удобного языка программирования.
2. Объекты в C++
Самое существенное улучшение по сравнению с языком С касается концепции объектно-ориентированного программирования:
– более четкий контроль структуры программы с целью её декомпозиции;
– возможность создания новых типов данных со своими собственными специализированными операторами;
– средства для создания повторно используемого кода.
Классы представляют собой первичный механизм, позволяющий реализовать скрытие данных, абстракцию данных и наследование – те свойства,которые делают С++ объектно-ориентированным языком.
Классы С++ предусматривают создание расширенной системы предопределенных типов. Каждый тип класса представляет уникальное множество объектов и операций над ними, а также операций, используемых для создания,манипулирования и уничтожения таких объектов. Могут быть объявлены производные классы, наследующие компоненты одного или нескольких базовых (порождающих) классов.