Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Статические компонентные данные и компонентные функции static и const




 

Статические элементы данных хранятся в одном месте, являются общими для всех объектов класса и существуют независимо от них.

При вызове компонентная функция – объектная функция (а1, а2, а3); получает явный (а1, а2, а3) и неявный список аргументов (компонентные данные объекта). Неявные аргументы доступны посредством this.

Статическая компонентная функция доступа к компонентным данным не имеет, за исключением статических.

Обращение через оператор разрешения области видимости к статическим компонентным данным и функциям является предпочтительным:

 

class_type:: статический_элемент

class_type:: статическая_функция ()

 

Именно так отражается тот факт, что элемент и функция являются статическими.

Компонентная функция, объявленная как const, не может изменять свои неявные аргументы, она получает неявный указатель:

const class_type * const this.

 

 

Изменчивость

 

Объекты класса могут быть объявлены как константы, и это гарантирует постоянство компонентных данных. Отказаться можно с помощью const_cast или индивидуально для отдельных компонентных данных с использованием ключевого слова mutable.

 

Вложенные классы

 

Классы могут быть созданы внутри блоков, в том числе внутри других классов, как часть реализации более сложной конструкции. Использование таких классов невозможно за пределами соответствующих блоков.

Вложение классов позволяет вкладывать определения функций - компонентная функция должна быть определена внутри своего локального класса, и на данную функцию нельзя ссылаться вне области видимости ее локального класса.

 

Пример:

 

class type {

public:

void f1 (int b) {x = b; y = 0;} // компонентная функция для доступа к x и y

void f2 (double k) {y = k*x;}

static void f3 (int c) {z = c;} //статическая компонентная функция для доступа только к z

int f4 () const {return x+y+z;} // f4 не может изменять x, y, z

friend int f5 (const type & t); // дружественная классу type функция, аналог f4

private:

int x; //элемент данных индивидуальный для

int y; // каждого объекта

static int z; //статический элемент данных, общий для всех объектов

};

int type:: z = 10; // должен быть определен и инициализирован вне класса

main()

{ type w1,w2; //объявление объектов

w1.f1(100); // инициализация w1: x = 100, y = 0, z = 10

w2.f1(200); // инициализация w2: x = 200, y = 0, z = 10

w1.f2(0.5); // вычисление y в w1

w2.f2(0.8); // вычисление y в w2

type:: f3(300); // вызов f3 для изменения z в w1 и w2

cout <<”w1 = ”<<w1.f4() // сумма x, y, z в w1

<<”w2 = ”<<f5(w2)<<endl; // сумма x, y, z в w2

}

 

Задания

 

Разработайте алгоритм и программу, реализующую абстрактный тип данных (АТД) – класс, согласно варианту задания (см. раздел III). Предусмотрите закрытую реализацию и открытый интерфейс. Интерфейс должен содержать псевдоконструкторы и псевдодеструктор, функции присваивания, вывода содержимого и обработки (сортировка, поиск, сравнение, арифметические действия и т.д.).

Проверьте работоспособность АТД на тестовом наборе данных.

Контрольные вопросы

 

1. Дайте определение понятия «класс». Сформулируйте правила доступа к его элементам.

2. С какой целью в классе объединены компонентные данные и компонентные функции?

3. Каким образом осуществляется доступ к открытым и закрытым элементам?

4. Опишите назначение дружественных функций, назовите их разновидности.

5. Что понимается под указателем this?

6. Каковы особенности использования статических компонентных данных?

7. В чем заключается синтаксис и семантика компонентных функций static и const?

8. Каким образом могут изменяться компонентные данные объектов, объявленных константами?

9. Каковы особенности создания вложенных классов?

 

Раздел V

СОЗДАНИЕ И УНИЧТОЖЕНИЕ ОБЪЕКТОВ КЛАССА

Цель работы: изучить синтаксис и семантику определения и вызова конструкторов и деструкторов; приобрести практические навыки создания и уничтожения объектов; изучить особенности применения различных видов конструкторов.

 





Поделиться с друзьями:


Дата добавления: 2016-07-29; Мы поможем в написании ваших работ!; просмотров: 1038 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Начинайте делать все, что вы можете сделать – и даже то, о чем можете хотя бы мечтать. В смелости гений, сила и магия. © Иоганн Вольфганг Гете
==> читать все изречения...

4401 - | 4219 -


© 2015-2026 lektsii.org - Контакты - Последнее добавление

Ген: 0.013 с.