- •Лекция: шаблоны функций
- •Унарные операции получения адреса ссылки
- •Взаимосвязь между указателями и массивами
- •Указатели на указатели
- •Конструктор и деструктор класса
- •Структуры
- •Доступ к элементам структуры
- •Область действия класса
- •Поразрядные операции
- •Присваивание побитовым копированием по умолчанию.
- •Дружественные классы.
- •Потоки ввода и вывода
- •Форматирование данных
Доступ к элементам структуры
Для доступа к элементам структуры или класса используется операция доступа к элементам - операция «точка» и «стрелка». Первая обращается к элементам структуры по имени переменной объекта или по ссылке на объект.
Чтобы нпечетать hour:
cout<<timeObject.hour;
Вторая обеспечивает доступ к элементам структуры через указатель на объект.
Адрес структуры timeObject Был уже присвоен timePtr, тогда чтобы напечатать hour:
cout<<timePtr->hour;
оперция точка имеет более высокий приоритет, чем указатель(*). Операции наряду с круглыми или квадратными скобками имеют второй приоритет, после разрешения области действия и ассоциативности слева направо.
Область действия класса
Данные-элементы класса (переменные, объявленные в определении класса) и функции-элементы (функции, объявленные в определении класса) имеют областью действия класс. Функции, не являющиеся элементом класса, имеют областью действия файл
При области действия класс элементы класса непосредственно доступны всем функциям-элементам этого класса и на них можно ссылаться просто по имени. Вне области действия класс к элементам класса можно обращаться либо через имя объекта, либо ссылкой на объект, либо с помощью указателя на объект.
Функции-элементы класса можно перегружать, но только с помощью других функций-элементов класса. Для перегрузки функции-элемента просто обеспечьте в определении класса прототип для каждой версии перегруженной функции и снабдите каждую версию функции отдельным описанием.
Поразрядные операции
Число 7 в двоичном представлении выглядит так: 00000111.
При применении оператора сдвига >>1 значит, что двоичную запись сдвинули на один бит вправо.
(что аналогично целочисленному делению на 2).
Получили 00000011 (правая единичка потерялась).
Это соответствует числу 3 в двоичном представлении.
получили 7/2=3.
Операция сдвига выполняется быстрее чем обычное деление/умножение, соответственно её использование выгоднее. Правда, это не всегда заметно, но всё-таки, при больших входных данных смысл использовать есть.
&& |
Поразрядное И |
Бит результата устанавливается в 1, если соответствующие биты обоих операндов равны 1 |
|| |
Поразрядное ИЛИ |
1, если бит хотя бы одного операнда равен 1 |
^ |
Поразрядное ИСКЛЮЧАЮЩЕЕ ИЛИ |
1, если бит одного и только одного операнда=1 |
~ |
Поразрядное НЕ |
Меняет 1 на 0 и наоборот |
<< |
Поразрядный сдвиг влево |
Сдвигает биты первого операнда влево на количество позиций, заданных вторым операндом. При этом освобождающиеся справа биты заполняются нулями |
>> |
Поразрядный сдвиг вправо |
Сдвигает биты первого операнда вправо на количество позиций, заданных вторым операндом. При этом освобождающиеся слева биты заполняются нулями |
1. 01001010 << 3 = 01010000
2.10010010 >> 4 = 00001001
3.10010010 & 10010010 =10010010
4.00110010&11011010 = 00010010
5. 10010010 | 10010010 = 10010010
6. 00110010 |11011010 = 11111010
7.10010010^10010010=00000000
8.00110010^11011010=11101000