|
Программирование >> Аргументация конструирования
float gpa; void Teacher::assignGrades (); эта функция имеет доступ к защищенным членам класса Student В отличие от примера с функциями - не членами, класса должна быть объявлена перед тем, как класс Student объявит ее другом. Существующий класс может быть объявлен как друг некоторого другого класса целиком. Это означает, что все функции-члены класса становятся друзьями другого класса, например: class Student; class Teacher protected: int noStudents; Student *pList [100] ; public: void assignGrades 0; class Student friend class Teacher; public: . - - . те же открытые члены, что и раньше protected: Teacher *рТ; int semesterHours; количество часов в семестре float gpa; Теперь любая функция-член класса Teacher имеет доступ ко всем защищенным членам класса Student. Объявление одного класса другом другого неразрывно связывает два класса. Создание и удаление объектов: конструктор и деструктор вэйк>й ыа£е... Создание объектов конструкторов Что такое деструктор ш й бъекты в программе создаются и уничтожаются так же, как и объекты реального ира. Если класс сам отвечает за свое сутцествование, он должен обладать возможностью управления процессом уничтожения и создания объектов. Программистам на С+ + повезло, поскольку C++ предоставляет необходимый для этого механизм (хотя, скорее всего, это не удача, а результат разумного планирования языка). Прежде чем начинать создавать и уничтожать объекты в программе, обсудим, что значит создавать объекты . Создание oSekj Некоторые подчас теряются в терминах класс и объект. В чем разница между этими терминами? Как они связаны? Я могу создать класс Dog, который будет онисывать соответствующие свойства лучшего друга человека. К примеру, у меня есть две собаки. Это значит, что мой класс Dcg содержит два экземпляра - Труди и Скутер (надеюсь, что два: Скутера я не видел уже несколько дней...). О- Класс описывает тип предмета, а объект является экземпляром класса. Dcg является классом, а Труди и Скутер - объектами. Каждая собака представляет собой отдельный объект, но существует только один класс Dog, при этом не имеет значения, сколько у меня собак. Объекты могут создаваться и уничтожаться, а классы попросту существуют. Мои собаки Труди и Скутер приходят и уходят, а класс Dog (оставим эволюцию в стороне) вечен. Различные типы объектов создаются в разное время. Когда программа начинает выполняться, создаются глобальные объекты. Локальные объекты создаются, когда программа сталкивается с их объявлением. pMHfff Глобальный объект является объектом, объявленным вне каких-либо функций. Локальный объект объявляется внутри функции, а следовательно, является локальным для функции. В приведенном ниже примере переменная те является глобальной, а переменная поМе - локальной по отнощению к pickOne (). int me ; void pickOne (} < ir.t noMe; Согласно правилам С глобальные объекты по умолчанию инициализиру-* ются нулевыми значениями- Локальные объекты, т.е. объекты, объявленные внутри функций, не имеют инициализирующих значений. Такой подход, вообще говоря, для классов неприемлем. C++ позволяет определить внутри класса специальную функцию-член, которая автоматически вызывается при создании объекта этого класса. Эта функция-член называется конструктором и инициализирует объект, приводя его в некоторое необходимое начальное состояние. Кроме конструктора, в классе можно определить деструктор, который будет вызываться при уничтожении объекта. Эти две функции и являются предметом обсуждения данной главы. Конструктор - это функция-член, которая вается автоматически во время создания объекта соответствующего класса. Основной задачей конструктора является инициализация объекта, приводящая его в некоторое корректное начальное состояние. Зачем нужны конструкторы Объект можно проинициализировать на этапе его объявления, как сделал бы программист на С: struct Student int semesterHours; float gpa; void fn() Student s = {0,0}; ...продолжение функции... Этот фрагмент кода не будет работать для настоящего класса C++, поскольку внешнее приложение не имеет доступа к защищенным членам класса. Приведенный ниже фрагмент некорректен. class Student public: . , .открытые члены. . . Drotected: int semesterHours; gpa; void fn О { Student s ,0}; неправильно, так как недоступны / / ... продолжение функции. . . В данном случае функции - не член f п () не имеет права обращаться к членам semesterHours и gpa, поскольку они являются защищенными (а функция не объявлена в качестве друга класса).
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |