Студопедия Главная Случайная страница Обратная связь

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

R.10.3 Абстрактные классы





Абстрактные классы дают средство для представления в языке общихпонятий, таких, например, как фигура, для которых могут использоватьсятолько конкретные их варианты, например, круг или квадрат. Кроме тогоабстрактный класс позволяет задать интерфейс, разнообразные реализациикоторого представляют производные классы. Абстрактным называется класс, который можно использовать толькокак базовый для некоторого другого класса, т.е. нельзя создатьникакого объекта абстрактного класса кроме того, который представляетбазовый класс для некоторого производного класса. Класс считаетсяабстрактным, если в нем есть хотя бы одна чистая виртуальнаяфункция. При описании класса виртуальная функция описывается какчистая с помощью спецификации-чистой ($$R.9.2). Чистую виртуальнуюфункцию не нужно определять, если только она явно не вызываетсяс помощью конструкции уточненное-имя ($$R.5.1). Рассмотрим пример: class point { /*... */ }; class shape { // абстрактный класс point center; //... public: point where() { return center; } void move(point p) { center=p; draw(); } virtual void rotate(int) = 0; // чистая виртуальная virtual void draw() = 0; // чистая виртуальная //... }; Абстрактный класс нельзя использовать как тип формального параметра,тип возвращаемого значения, а также как тип в операции явногопреобразования типа. Можно описывать указатели и ссылки на абстрактныйкласс, например: shape x; // ошибка: объект абстрактного класса shape* p; // нормально shape f(); // ошибка void g(shape); // ошибка shape& h(shape&); // нормально Чистые виртуальные функции и наследуются как чистые виртуальныефункции, например: class ab_circle: public shape { int radius; public: void rotate(int) { } // ab_circle::draw() чистая виртуальная функция }; Поскольку функция shape::draw() является чистой виртуальной функцией,то такой же будет по определению и функция ab_circle::draw(). Дляприведенного ниже описания класс circle не будет абстрактным, и уфункции circle::draw() где-то должно существовать определение. class circle: public shape { int radius: public: void rotate(int) { } void draw(); // должна быть где-то определена }; Функции-члены можно вызывать из конструктора абстрактного класса,результат прямого или косвенного вызова чистой виртуальной функциидля объекта, созданного с помощью такого конструктора, неопределен.







Дата добавления: 2015-09-04; просмотров: 339. Нарушение авторских прав; Мы поможем в написании вашей работы!




Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...


ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...


Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...


Логические цифровые микросхемы Более сложные элементы цифровой схемотехники (триггеры, мультиплексоры, декодеры и т.д.) не имеют...

Алгоритм выполнения манипуляции Приемы наружного акушерского исследования. Приемы Леопольда – Левицкого. Цель...

ИГРЫ НА ТАКТИЛЬНОЕ ВЗАИМОДЕЙСТВИЕ Методические рекомендации по проведению игр на тактильное взаимодействие...

Реформы П.А.Столыпина Сегодня уже никто не сомневается в том, что экономическая политика П...

Кишечный шов (Ламбера, Альберта, Шмидена, Матешука) Кишечный шов– это способ соединения кишечной стенки. В основе кишечного шва лежит принцип футлярного строения кишечной стенки...

Принципы резекции желудка по типу Бильрот 1, Бильрот 2; операция Гофмейстера-Финстерера. Гастрэктомия Резекция желудка – удаление части желудка: а) дистальная – удаляют 2/3 желудка б) проксимальная – удаляют 95% желудка. Показания...

Ваготомия. Дренирующие операции Ваготомия – денервация зон желудка, секретирующих соляную кислоту, путем пересечения блуждающих нервов или их ветвей...

Studopedia.info - Студопедия - 2014-2025 год . (0.013 сек.) русская версия | украинская версия