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

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

R.10.2 Виртуальные функции





Если класс base содержит виртуальную ($$R.7.1.2) функцию vf, апроизводный от него класс derived также содержит функцию vf тогоже типа, тогда вызов vf для объекта класса derived являетсяобращением к derived::vf, даже если доступ к этой функции происходитчерез указатель или ссылку на класс base. Говорят, что функцияпроизводного класса подавляет функцию базового класса. Однако, еслитипы функций ($$R.8.2.5) различны, функции считаются разными и механизмвиртуальности не действует (см. также $$R.13.1). Считается ошибкой,если функция производного класса отличается от виртуальной функциибазового класса только типом возвращаемого значения. Рассмотримпример: struct base { virtual void vf1(); virtual void vf2(); virtual void vf3(); void f(); }; class derived: public base { public: void vf1(); void vf2(int); // скрывает base::vf2() char vf3(); // ошибка: различие только в типе // возвращаемого значения } void g() { derived d; base* bp = &d; // стандартное преобразование: derived* в base* bp->vf1(); // вызов derived::vf1 bp->vf2(); // вызов base::vf2 bp->f(); // вызов base::f } Здесь три вызова для объекта d класса derived приведут к обращениям кderived::vf1, base::vf2 и base::f соответственно. Иными словами,интерпретация вызова виртуальной функции зависит от типа объекта,для которого она вызывается, тогда как интерпретация вызованевиртуальной функции-члена зависит только от типа указателя илиссылки на этот объект. Например, выражение bp->vf1()приведет к вызову derived::vf1(), поскольку bp указывает на объекткласса derived, в котором функция derived::vf1() подавляетвиртуальную функцию base::vf1(). Наличие спецификации virtual означает, что функция является членом,поэтому виртуальная функция не может быть глобальной функцией (не членом)($$R.7.1.2). Точно так же виртуальная функция не может бытьстатическим членом, т.к. для вызова виртуальной функции необходимоналичие определенного объекта, который указывает, какую функциюнадо вызывать. В другом классе виртуальную функцию можно описать какдруга. Функция, подавляющая виртуальную, сама считается виртуальнойфункцией. Спецификацию virtual можно использовать для подавляющейфункции производного класса, но это избыточно. Виртуальная функцияможет быть определена или описана в базовом классе как чистая($$R.10.3). Виртуальную функцию, которая определена в базовом классе,не нужно определять в производном классе: при всех вызовах будетиспользоваться функция, определенная в базовом классе. Механизм виртуальности при вызове отключается, если есть явноеуточнение имени с помощью оператора разрешения области видимости ($$R.5.1), например: class B { public: virtual void f(); }; class D: public B { public: void f(); }; void D::f() { /*... */ B::f(); } Здесь обращение к f из D приводит к вызову B::f, а не D::f.







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




Шрифт зодчего Шрифт зодчего состоит из прописных (заглавных), строчных букв и цифр...


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


Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...


Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Методы прогнозирования национальной экономики, их особенности, классификация В настоящее время по оценке специалистов насчитывается свыше 150 различных методов прогнозирования, но на практике, в качестве основных используется около 20 методов...

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

Образование соседних чисел Фрагмент: Программная задача: показать образование числа 4 и числа 3 друг из друга...

Травматическая окклюзия и ее клинические признаки При пародонтите и парадонтозе резистентность тканей пародонта падает...

Подкожное введение сывороток по методу Безредки. С целью предупреждения развития анафилактического шока и других аллергических реак­ций при введении иммунных сывороток используют метод Безредки для определения реакции больного на введение сыворотки...

Принципы и методы управления в таможенных органах Под принципами управления понимаются идеи, правила, основные положения и нормы поведения, которыми руководствуются общие, частные и организационно-технологические принципы...

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