Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Янг Майкл Дж. -> "Visual С++ 6. Полное руководство: В 2 т.(том1)" -> 44

Visual С++ 6. Полное руководство: В 2 т.(том1) - Янг Майкл Дж.

Янг Майкл Дж. Visual С++ 6. Полное руководство: В 2 т.(том1) — Бином, 2006. — 569 c.
Скачать (прямая ссылка): vicualcc2006t1.djvu
Предыдущая << 1 .. 38 39 40 41 42 43 < 44 > 45 46 47 48 49 50 .. 204 >> Следующая

Можно также определить функцию-член класса с использованием спецификатора static, например:
class CTest {
// . . .
static int GetCount 0 {
// код функции . . .
}
// ...
}
Статическая функция-член класса имеет следующие свойства.
• Программный код вне класса может вызвать функцию с использованием имени класса и оператора расширения области видимости без ссылки на экземпляр класса, который не нужен, даже если он существует, например:
void main () {
int Count = CTest::GetCount (); // . . .
}
• Статическая функция-член непосредственно может ссылаться только на статические переменные и статические функции, принадлежащие ее классу. Так как эту функцию можно вызвать без ссылки на экземпляр класса, статическая функция-член не имеет указателя this, содержащего адрес объекта. Следовательно, если она пытается получить непосредственный доступ к нестатическим переменным-членам, компилятор не сможет определить, какому объекту принадлежат переменные-члены.
Статические переменные-члены и функции-члены могут использоваться для хранения переменной, применяемой всем классом, или переменной, общей для всех экземпляров класса. Следующая программа иллюстрирует использование статических элементов для подсчета текущего количества экземпляров класса.
include <iostream.h>
class CTest {
private:
static int Count;
public: CTest () {
++Count;
}
-CTest () {
—Count; }
static int GetCount () {
return Count; };
};
int CTest::Count = 0;
void main () {
cout « CTest::GetCount () « " objects exist\n"; CTest Testl;
CTest *PTest2 = new CTest;
cout « CTest::GetCount () « " objects exist\n"; delete PTest2;
cout « CTest:: GetCount () « " objects exist\n "; }
В результате будет напечатано следующее.
0 objects exist 2 objects exist
1 objects exist
Итоги
В этой главе вы узнали, как определить класс, создать экземпляр класса и получить доступ к его данным и функциям. Вы также узнали о некоторых членах класса специального типа: конструкторах, деструкторах, встроенных функциях-членах и статических членах. Перечислим некоторые рассмотренные в этой главе концепции.
• Класс — это нечто похожее на структуру в языке С. Однако он может содержать и переменные-члены (или поля), и функции (известные как функции-члены или методы класса), которые оперируют переменными-членами.
• Определение класса создает новый тип данных. Чтобы использовать класс, вы должны реально создать члены класса, принадлежащие к этому типу данных. Они называются экземплярами класса или объектами класса.
• Можно создать объект класса, определяя его, как переменную встроенного типа. В качестве альтернативного варианта используются операторы new и delete для динамического создания и разрушения объектов.
• Доступ к членам класса организуется операторами "." или "->", подобно доступу к элементам структуры языка С. Доступом к членам класса можно управлять, используя спецификаторы доступа public (открытые) или private (закрытые) (переменные класса, закрытые по умолчанию).
• Согласно принципам инкапсуляции, спецификаторы доступа необходимо использовать для предотвращения непосредственного доступа пользователя к переменным-членам внутри класса. Можно создать функцию-член, изменяющую
переменные-члены, но только после проверки правильности значения, заданного пользователем.
• Конструктор — это специальная функция-член, которая автоматически вызывается каждый раз при создании экземпляра класса. Обычно она используется для инициализации переменных-членов или выполнения любых других задач, подготавливающих класс к использованию. Конструктор может быть определен с любым числом параметров. Конструктор по умолчанию — это конструктор без параметров.
• Деструктор — это специальная функция-член, вызывающаяся автоматически при уничтожении объекта класса. Он может быть использован для освобождения памяти, зарезервированной для хранения объекта класса, или для выполнения других задач очистки памяти.
• Метод (функция-член) класса может быть определен внутри тела класса либо объявлен внутри класса, но определен вне его.
• Функция-член, определенная внутри класса, автоматически рассматривается как встроенная функция. Функция-член, определенная вне класса, рассматривается как встроенная функция, только в случае, когда она объявлена с использованием спецификатора inline.
• Внутри метода спецификатор this содержит адрес объекта, на который ссылается вызов функции (т. е. того объекта, для которого была вызвана функция-член).
• Если переменная-член определена с использованием спецификатора static, будет существовать единственная копия такой переменной-члена, независимо от числа созданных экземпляров класса. К статической переменной можно обратиться с использованием имени класса и операции расширения области видимости без ссылки на частный экземпляр класса.
• Функция-член, определенная с использованием спецификатора static, может быть вызвана с использованием имени класса и операции расширения области видимости без ссылки на специфический объект. Такая функция доступна только для статических переменных-членов и статических функций-членов, принадлежащих к ее классу.
Предыдущая << 1 .. 38 39 40 41 42 43 < 44 > 45 46 47 48 49 50 .. 204 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100