- •Понятия объекта, класса объектов.
- •2. Основные понятия ооп: инкапсуляция, наследование и полиморфизм.
- •Модульное программирование.
- •4. Нисходящее программирование
- •5. Структурное програММирование
- •6. Прототипы функций.
- •7. Перегрузка функций
- •8. Значения формальных параметров по умолчанию.
- •9. ССылка и параметры-сСылки
- •10. Встраиваемые функцИи
- •11. ОперацИи new и delete
- •12. ФункцИи-члены и даННые-члены
- •13. Интерфейсы и реализация
- •14. Конструкторы и инициализация
- •15. Конструктор без параметров (по умолчанию)
- •16. Деструкторы и очистка
- •17. Конструктор копирования
- •18. Указатель this
- •19. Статические члены: функции и данные.
- •20. Указатели на члены.
- •21. Структуры и объединения
- •22. Константные члены-функции и константные объекты.
- •Void f();
- •Перегрузка бинарных и унарных операций.
- •Перегруженные операции индексирования, вызова функций, инкремента и декремента префиксных и постфиксных.
- •Перегрузка new, delete
- •Преобразование типов, определяемых пользователем с помощью конструкторов и операций преобразования.
- •Неявное преобразование типов
- •30. Наследование клаССов и производные клаССы.
- •31. Конструкторы, деструкторы и наследование.
- •Множественное наследование
- •Виртуальные базовые классы.
- •Virtual void draw();
- •Виртуальные функции.
- •35. Полиморфизм.
- •36. Абстрактные клаССы и чистые виртуальные функцИи.
- •37. Заголовочные файлы.
- •38. ПредопределЁнНые объекты и потоки.
- •39. Ошибки потоков.
- •41. Конструкторы файловых потоков.
- •42. Открытие файлов в разных режимах.
- •43. ВВод-вывод в файлы.
- •44. Шаблоны функций.
- •45. Параметры шаблонов.
- •46. Шаблоны клаССов.
22. Константные члены-функции и константные объекты.
Константная функция-член возвращает константный объект, который может использоваться как любой другой константный объект.
Функции-члены inline
Подставляемые (inline) функции – распр-ный вид ф-й-членов в С++. Они были разработаны для повышения эффективности вызовов ф-й членов и предоставления языку объектного подхода, при мин. расходе выч. мощности на вызовы ф-й. Подставляемые ф-и объявляются и опр-ся в объявлении класса без какого-либо спец-ого ключевого слова.
Такие ф-и обрабатываются компилятором почти так же, как и макрос: вызов непосредственно заменяется телом ф-и. Для коротких ф-й такой подход очень эффективен, поскольку отсутствуют инструкции вызова и возврата из ф-и.
Каждый раз, когда вызывается подставляемая ф-я, её вызов заменяется телом ф-и. Это имеет смысл только в том случае, если подставляемые ф-и небольшие. Если же они занимают много места, то прога может стать необоснованно большой.
Сложность подставляемых ф-й ограничена. Если компилятор посчит, что ф-я слишком велика или сложна, то он будет считать её обыкновенной ф-ей - членом.
Ф-и - члены с константным указателем this
Модификатор const применим и к телу функции-члена класса для указания на огранияенность её возможностей. Функции-члены, объявленные таким образом с помощью const, являются новшеством языка С++. В данном случае ключевое слово const не относится к возвращаемому функцией значению, а касается указателя this, используемого в функции. Например:
class Example
{
int value;
public:
int GetValue() const; // обыкновенная функция
int ReadValue() const { return value; }; // подставляемая функция
};
int Example::GetValue() const{ return value; };
23,29. ФункцИИ-друзья.
Функции-друзья — это функции, не являющиеся функциями-членами и, тем не менее, имеющие доступ к защищённым и закрытым членам класса. Они должны быть объявлены в теле класса как friend.
В качестве параметра ей должен передаваться объект или ссылка на объект класса, поскольку указатель this ей не передается.
Например:
class Matrix {
...
friend Matrix Multiply(Matrix m1, Matrix m2);
...
};
Matrix Multiply(Matrix m1, Matrix m2) {
...
}
Здесь функция Multiply может обращаться к любым полям и функциям-членам класса Matrix. Одна функция может "дружить" сразу с несколькими классами. Функция-член одного класса может быть другом другого класса:
class x {
// ...
Void f();
};
class y {
// ...
friend void x::f();
};
Вполне возможно, что все функции одного класса являются друзьями другого класса. Для этого есть краткая форма записи:
Н-р:
class x {
friend class y;
// ...
};
В результате такого описания все функции-члены y становятся друзьями класса x.