Void AddElement(); // добавление элемента в список 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Void AddElement(); // добавление элемента в список



...

private:

int __data; // данные

CListElement * __pnext; // указатель на следующий элемент

static CListElement * __phead; // первый элемент (голова списка)

};

Реализация класса

void CListElement::AddElement() {

if (__phead) // список не пуст?

__phead –> __pnext = this; // этот элемент перед головой

this –> __pnext = NULL; // впереди пока нет элементов

__phead = this; // этот элемент - голова

}

...

Изложенный в данной главе материал позволяет понять базовые принципы организации автономных классов, определение объектов таких классов и доступ к их компонентам. Однако, для практики большой интерес представляют не только классы, но и отношения между ними, а также способы формирования новых классов на основе существующих. Одним из таких способов является наследование, которому посвящена глава 2.

 


Вопросы для самопроверки

1. Охарактеризуйте понятие класса. Чем класс отличается от структуры?

2. Какие компоненты могут входить в класс?

3. Почему определение класса обычно выносится в заголовочный файл, а реализация – в отдельный cpp-файл?

4. Для чего необходимо предварительное объявление класса? Каким образом оно осуществляется? Приведите общий формат и пример.

5. В классе CMatrix, описывающем прямоугольные матрицы, имеется компонент static const size_t __max_size. Как правильно проинициализировать этот компонент?

6. В классе CNamedPointer, описывающем именованные указатели, есть компонент const string&__name, содержащий имя указателя. Выделите недостатки такого способа задания компонента для хранения имени.

7. Как правильно инициализировать константный указатель на константу, входящий в число компонент класса? Приведите пример.

8. Имеется оператор (pseq->*mbr_func_ptr)(6); Выведите из него возможный вариант определения имени mbr_func_ptr, учитывая, что pseq – указатель на объект класса CSequence.

9. Пусть требуется определить класс поименованных векторов и пусть всем объектам этого класса, формируемым конструктором по умолчанию, надо давать умалчиваемое значение имени __default_name. Как можно определить компонент __default_name? Приведите эскиз класса векторов, исключив несущественные компоненты.

10. Вызов функции CSequence::AlreadyPrinted() встречается в следующем контексте: if (!seq.AlreadyPrinted()) seq.print(); Восстановите возможный прототип этой функции, полагая, что она не имеет значений параметров по умолчанию.

11. Почему в public-секцию класса нежелательно вводить компонентные данные? Поясните ответ примером.

12. Имеется класс CSomeClass. Правильно ли определен заголовок конструктора копирования этого класса: CSomeClass(CSomeClass cloned_object)? Обоснуйте ответ.

13. Какие действия происходят при выполнении оператора CBitSequence * pseq = new CBitSequence(8); если CBitSequence – имя некоторого класса?

14. Опишите алгоритм выполнения оператора delete[] p; где p – указатель на массив объектов некоторого класса.

15. Какие новые свойства придает конструктору ключевое слово explicit? Приведите пример.

16. Почему ключевое слово explicit не требуется использовать в конструкторах по умолчанию и копирующих конструкторах?

17. Имеет ли смысл введение ключевого слова explicit в конструктор с заголовком CSomeClass(size_t m, size_t n = 0)? Обоснуйте ответ.

18. Когда имеет смысл определение класса с ключом union? Дайте пример.

19. В каком случае функция с модификатором const может изменить компонентные данные объекта?

20. В каких случаях следует объявлять компонентные функции класса константными? Обоснуйте ответ.

21. Почему статические компонентные функции не могут иметь модификаторов const, volatile и const volatile? Обоснуйте ответ.

22. Какой вид принимает определение указателя this в зависимости от спецификаторов компонентной функции const, volatile и const volatile?

 

Задачи

 

1. Спроектировать класс, описывающий конечное множество натуральных чисел. Включить в класс функции для добавления элементов в множество, удаления элементов из множества, проверки принадлежности элемента множеству, сравнения множеств. Предусмотреть также функции для объединения, пересечения и разности множеств. Показать использование класса множества в программе.

2. Разработать класс, описывающий библиографическую карточку. Ввести в класс компоненты для представления вида издания (книга, журнал, сборник и т.д.), вида публикации (статья, тезисы, техническое описание и т.п.), выходных данных (место и год издания, число страниц), названия и фамилий авторов. Создать несколько объектов класса. Показать как с ними можно работать.

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

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

 



Поделиться:


Последнее изменение этой страницы: 2016-08-14; просмотров: 125; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.226.93.207 (0.038 с.)