КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Class CTest
Class CTest Class CTest { public: int N; // N указывается без ссылки на объект int GetN() {return N;} } При указании на элементы данных внутри класса описывать частный экземпляр класса не нужно!
CTest Test1; CTest *PTest2=new CTest; // вызывается копия Test1 cout<<Test1.N<<” ”; // вызывается копия Test1 cout<<PTest2->N<<” ”;
Для того, чтобы определить, на какую копию N ссылается метод, компилятор в действительности передает методу скрытый указатель на объект, на который ссылается вызов функции. Функция неявно использует этот скрытый указатель для доступа к правильной копии элемента данных. Пример: Test1.GetN(); Компилятор передает скрытый указатель GetN на объект Test1. Метод GetN точно использует этот указатель для доступа к копии N, принадлежащей объекту Test1. Непосредственный доступ обеспечивает ключевое слово this. Внутри метода this является предопределенным указателем, который содержит адрес объекта, на который ссылается вызов функции. Пример: int GetN() {return this->N;} Если нужен доступ к глобальным элементам данных или к функции, которая имеет такое же имя как данные класса или метод класса, надо перед именем поставить оператор расширения области видимости (::). Пример: int N=0; // глобальная переменная { public: int N; int GetN() {return N;} int Demo() { cout<<::N<<” ”; // глобальная переменная N cout<<N<<” ”; // доступ к N с помощью this } }
Статические элементы данных Обычно каждый экземпляр класса имеет свою собственную копию данных, принадлежащих классу. Если элемент данных объявить с ключевым словом static, то независимо от того, сколько экземпляров класса создается (даже если не создается ни одного), будет существовать единственная копия этого элемента данных. Пример: { public: static int Count; } Здесь существует единственная копия Count. Кроме объявления статического элемента данных внутри класса, необходимо определить и инициализировать эти данные вне класса как глобальные элементы данных Пример: // определение вне класса int CTest::Count=0; Поскольку статические элементы данных существуют независимо от любого объекта класса, доступ к ним можно получить, используя имя класса и оператор :: без ссылки на экземпляры класса. Пример: void main() { CTest::Count=1; ***** }
Подобно глобальной переменной, статический элемент данных определяется и инициализируется вне функции и представляет единую область памяти, которая существует на протяжении всей программы. Подобно обычным элементам данных, статический элемент данных имеет различные спецификации доступа.
Методы также могут быть статическими. Пример:
Дата добавления: 2014-01-14; Просмотров: 357; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |