
5. Классы
Ну и подобрались мы-таки к самой мощной из сегодняшних тем – к классам. Немного поиспользовав голову по прямому назначению, я понял, что объяснять их лучше всего через различия со структурами (их два). Как вы можете предположить, классы и структуры очень похожи.
5.1. Закрытость членов
Первое различие – это то, что члены классов по умолчанию закрыты. Это значит, что они видны только для функций-членов. Чтобы это исправить, перед началом области видимых через точку членов нужно написать слово public и поставить двоеточие. Чтобы обратно закрыть ее – написать private и опять поставить двоеточие. Это нужно дабы не захламлять область видимости ненужными данными. Когда будете писать большие программы, поймете. Кроме того, это позволяет реализовать один класс несколькими способами. Для достижения этого требуется организовать доступ к переменным через тривиальные открытые функции-члены в духе get_a(){return a;}. Тоже тривиально.
5.2. Механизм наследования и виртуальные функции.
Второе отличие классов от структур – классы могут наследоваться. Класс – наследник в таком случае получает все переменные и функции класса – предка, но может добавить что-то свое. Кроме того, экземпляр класса-наследника является экземпляром класса-предка. Записывается это так:
1 2 |
class A {}; class B:A {}; |
Это означает, что класс B является наследником класса A.
Виртуальная функция – функция, которая может быть переопределена в классе-наследнике. Для того, чтобы функция стала виртуальной, нужно в начале прототипа написать слово virtual. И еще – чтобы не реализовывать виртуальную функцию в классе-предке, после прототипа, то есть перед точкой с запятой нужно приравнять функцию к нулю. Класс, содержащий хотя бы одну такую функцию, называется абстрактным и отличается тем, что его экземпляр невозможно создать в принципе.
В остальном – класс от структуры ничем принципиально не отличается.
5.3. Заключение.
Классы – очень мощная вещь для средних (150-800 строк), больших (800 – 2000 строк) и тем более корпоративных (от 2000 и до нескольких миллионов строк чистого кода) программ. С этих пор мы будем писать программы меньшего чем среднего размера только разве что на олимпиадах.
6. Пространства имен
И в завершение нашего конспекта размером со среднюю программу большого размера расскажу о загадочной строке using namespace std;.
С возрастанием популярности языка c++ годам эдак к девяностым перед программистами возникла проблема чрезвычайного захламления глобальной области видимости. Тогда и ввели пространства имен – маленькие области видимости, доступ к элементам которых осуществляется посредством прибавления в начало имени элемента имени пространства имен и двух двоеточий. Оператор using namespace сливает все элементы пространства имен в глобальную область. Да, кстати, и тогда же программисты условились писать в пространстве имен std все, что им могло пригодится в реальной жизни.
На сегодня все. До встречи на практике *).