Программирование >>  Аргументация конструирования 

1 ... 52 53 54 [ 55 ] 56 57 58 ... 108


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, поскольку они являются защищенными (а функция не объявлена в качестве друга класса).



1 ... 52 53 54 [ 55 ] 56 57 58 ... 108

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика