|
Программирование >> Программирование на языке c++
function возвращает объект вложенного класса nested classl. Рассмотрим, как можно описать функцию function. Описание должно начинаться с полного имени внешнего класса (в примере extemal class::) и продолжаться полными именами соответствующих вложенных классов до достижения нужного имени. Для нашего примера это будет выглядеть так: externa( class::nested class1 external c(ass::f unction (nested class2 object name); {............................} Иное выражение в скобках (external class::nested class2 object name) не является ошибочным, однако префикс externai class:: можно опустить, поскольку он уже был задан перед именем функции. Рассмотрим пример: #include <iostream.h> class ext { int a,b; class nest 1 { int c,d; описание вложенного класса (private) public: nest1(int C,int D) : c(C),d(D) {} конструктор void dis();}; функция dis вложенного класса public: ext(int A,int B) : a(A), b(B) {} конструктор nest1* set n1() { return &nest1(100-l-a,200-l-b); } void disp n1() { set n1()->dis(); } class nest2 { char cc; описание вложенного класса (public) public: nest2(char CC) : cc(CC) {} конструктор void dis() { cout << cc endl; } void d str(char*); void ext::nest1::dis() { cout с \t d endl; } void ext::nest2::d str(char* str) { cout str cc endl; } void main(void) { ext my ext(1,2); my ext.disp n1{); ext::nest2 my n2(W); my n2.dis(); my n2.d str( Character = ); Bee необходимые пояснения к этой программе уже были даны выше. Результаты ее работы представятся в виде: 101 202 W Character = W 3.10. Статические компоненты класса В языках C/C++ существуют так называемые классы памяти. Один из них - это статическая память, которая является очень важной и очень часто используемой в различных программах. Понятие статической памяти воспринимается в двух различных аспектах: статическое размещение и ограничение видимости. Статическое размещение предполагает принадлежность памяти блоку, в котором она объявлена. Так, глобальные статические объекты принадлежат файлу, в котором они объявлены. К ним нельзя получить доступ из другого файла, который может быть присоединен на этапе компоновки. Локальные статические объекты принадлежат функции, в которой они объявлены. Содержимое такой памяти не меняется между вызовами функции (это постоянная память функции). Ограничение видимости - это свойство, которое диаметрально противоположно свойству внешней компонуемости. Таким образом, ключевые слова static и extern являются взаимоисключающими. Так, нельзя получить доступ к глобальной статической функции за пределами файла, в котором она объявлена. Когда объявляется класс, то задается только форма (структура) для будущих объектов этого класса. Когда объявляется объект некоторого класса, то выделяется память, структура которой определяется структурой соответствующего класса. Для каждого отдельного объекта при объявлении выделяется своя собственная память. Рассмотрим пример: class my class { Здесь my class - это объявление класса. При этом никакая память не выделяется. Ниже показывается объявление трех объектов - my obl, ту оЬ2 и ту оЬЗ класса my class: my class my ob1,my ob2,my ob3; Каждый из этих объектов имеет свой фрагмент памяти. В свою очередь каждый фрагмент памяти имеет единую структуру, определяемую классом my class. Иногда оказывается полезным выделить общую память для всех объектов одного и того же класса. В языке С++ структура такой памяти может быть задана при объявлении класса с помощью спецификатора static. Соответственно компоненты класса, занимающие общую память для всех объектов этого класса, называются статическими. Рассмотрим пример: class my class { static double a,b,c; Теперь для всех объектов класса my class будет выделена единая и общая память под компоненты-данные а, b и с. Все эти компоненты объявлены в пределах (в границах) класса my class и поэтому могут быть доступны из-за пределов класса, если только они имеют атрибут public. Рассмотрим новое объявление класса my class: class my class { public: static double a,b,c; } my object; Пусть необходимо получить доступ к компонентам а, Ь, с из-за пределов класса my class. В этом случае мы должны задавать полные имена этих компонентов, другими словами, обращаться к ним, например, так:
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |