5 (Семинары и упражнения), страница 2
Описание файла
Файл "5" внутри архива находится в папке "Семинары и упражнения". PDF-файл из архива "Семинары и упражнения", который расположен в категории "". Всё это находится в предмете "информатика" из 2 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 2 страницы из PDF
Абстрактные базовые классыВозможна ситуация, когда имеет смысл в базовом классе максимально подробно описатьинтерфейсы, но реализовывать эти интерфейсы и создавать объекты базового классанеобходимости нет. Т.е. данный класс не предполагается использовать каксамостоятельный, а только в качестве базового для производных классов, которые будутснабжены конкретными реализациями интерфейса. Такой класс называется абстрактнымбазовым.Чтобы описать в абстрактном классе нереализованный метод используют чистовиртуальные функции. Чисто виртуальная функция – это виртуальная функция,содержащая последовательность = 0 в конце своего объявления, например:virtual void show() = 0;Чисто виртуальная функция не требует (хотя и допускает) наличия реализации.
Если вописании класса есть хотя бы одна чисто виртуальная функция, он автоматическипревращается в абстрактный без возможности создания объектов этого класса.8. Защищенный доступЭлементы данных или методы класса могут быть объявлены не только частными ( private)или общедоступными (public), но и защищенными (protected). Защищенные элементыпроявляют себя как частные для внешнего мира (т.е. напрямую недоступны), но являютсядоступными в производных от данного класса классах.5Например, если элемент y в классе Vector объявить защищеннымclass Vector{private: //double x;protected:double y;…}то он по-прежнему будет недоступен в главной функции, но к нему могут напрямуюобращаться методы производного класса NamedVector.void main(){Vector v;cout << v.x; // ошибка, элемент не доступенcout << v.y; // ошибка, элемент не доступенvoid NamedVector::show(){cout << x; // // ошибка, элемент не доступенcout << y; // Ok}}Литература.Стивен Прата.
"Язык программирования Си++. Лекции и упражнения. Учебник: Пер. С англ." - ОООДиаСофтЮП, 2004. Главы 12-13.Упражнение С5_1.1. Создайте класс, в котором предусмотрите специальный элемент данных для хранениячисла созданных («живущих») объектов.2. Напишите статический метод, который выводит это число на экран.3. В основной функции выведите количество созданных объектов вашего класса в самомначале работы программы и после объявления массива объектов из 12 элементов.Упражнение С5_2.1. Разработайте производный от класса Vector класс NamedVector, динамически выделяяпамять для хранения имени вектора.2. Следует не забыть соответствующим образом переопределить все используемыеконструкторы, включая конструктор копирования, и оператор присваивания.3.
Переопределите оператор [] (индексатор) так, чтобы для объекта класса NamedVector онвозвращал символ элемента данных name, порядковый номер которого совпадает сцелочисленным индексом, переданным оператору [] в качестве аргумента. Если индекснаходится вне диапазона числа символов в строке name, индексатор должен возвращатьсимвол «!».Упражнение С5_3.1. Используя в качестве базового класс Vector, определите производный класс Vector3d,дополнив элементы данных координатой z (трехмерный вектор).2.
Определите в нем конструктор(ы) и деструктор. Переопределите метод вычислениямодуля вектора, объявив соответствующий метод в базовом классе виртуальным.Переопределите операторы: +, -, +=, -=, операторы умножения «*» вектора на число ичисла на вектор, оператор деления «/» вектора на число, оператор вывода << .6Упражнение С5_4*.1. Используя класс трехмерных векторов Vector3d, модифицируйте задачу о случайномблуждании из упражнения C3_4* для анализа блуждания в трехмерном пространстве.Направление шага должно быть случайным с равномерным распределением, как поазимуту, так и по углу места.2.
Методом Монте-Карло рассчитайте среднее число единичных шагов, которые надосовершить, чтобы достигнуть границы сферы радиуса r = 50. Сравните результаты сослучаем блуждания на плоскости.7.