1.18 Виртуальные Функции
1.18 Виртуальные Функции
Предположим, что мы пишем программу для изображения фигур на экране. Общие атрибуты фигуры представлены классом shape, а специальные атрибуты – специальными классами:
class shape (* point center; color col; //... public: void move(point to) (* center=to; draw(); *) point where() (* return center; *) virtual void draw(); virtual void rotate(int); //... *);
Функции, которые можно определить не зная точно определенной фигуры (например, move и where, то есть, «передвинуть» и «где»), можно описать как обычно. Остальные функции описываются как virtual, то есть такие, которые должны определяться в производном классе. Например:
class circle: public shape (* int radius; public: void draw(); void rotatte(int i) (**) //... *);
Теперь, если shape_vec – вектор фигур, то можно написать:
for (int i = 0; i«no_of_shapes; i++) shape_vec[i].rotate(45);
чтобы повернуть все фигуры на 45 градусов (и заново нарисовать)
Такой стиль особенно полезен в интерактивных программах, когда объекты разных типов одинаково обрабатываются основным
программным обеспечением. Ведь по сути дела, типичное действие пользователя – это ткнуть в какой-нибудь объект и сказать Кто ты? Что ты такое? и Делай, что надо! не давая никакой информации о типе. Программа может и должна уяснить это для себя сама.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Виртуальные покупки
Виртуальные покупки Возможно, вы несколько удивитесь, что о таком серьезном деле, как покупки, я решил поговорить именно в уроке, посвященном развлечениям. Сделал я это по одной простой причине. Виртуальные покупки хоть и являются, без сомнения, делом вполне серьезным, но
10.2. Виртуальные библиотеки
10.2. Виртуальные библиотеки Интернет, являющийся гигантским хранилищем всевозможных сведений, представляет собой уникальный источник информации. Наряду с другими, библиографические ресурсы Сети помогут в поиске необходимой информации. Они представлены, прежде всего,
39. Виртуальные функции стоит делать неоткрытыми, а открытые — невиртуальными
39. Виртуальные функции стоит делать неоткрытыми, а открытые — невиртуальными РезюмеВ базовых классах с высокой стоимостью изменений (в частности, в библиотеках) лучше делать открытые функции невиртуальными. Виртуальные функции лучше делать закрытыми, или защищенными —
Правило 9: Никогда не вызывайте виртуальные функции в конструкторе или деструкторе
Правило 9: Никогда не вызывайте виртуальные функции в конструкторе или деструкторе Начну с повторения: вы не должны вызывать виртуальные функции во время работы конструкторов или деструкторов, потому что эти вызовы будут делать не то, что вы думаете, и результатами их
IV. Виртуальные клавиатуры
IV. Виртуальные клавиатуры IV.1. Виды виртуальных клавиатурИногда требуется в текст документа (корректура, правка после OCR) ввести Unicode символы. Удобнее для этого использовать соответствующие виртуальные клавиатуры:1. Различные символы (стрелки, ноты…): 2. Математическая: 3.
17.5. Виртуальные функции в базовом и производном классах
17.5. Виртуальные функции в базовом и производном классах По умолчанию функции-члены класса не являются виртуальными. В подобных случаях при обращении вызывается функция, определенная в статическом типе объекта класса (или указателя, или ссылки на объект), для которого она
17.5.4. Виртуальные функции и аргументы по умолчанию
17.5.4. Виртуальные функции и аргументы по умолчанию Рассмотрим следующую простую иерархию классов:#include iostreamclass base {public:virtual int foo( int ival = 1024 ) {cout " base::foo() -- ival: " ival endl;return ival;}// ...};class derived : public base {public:virtual int foo( int ival = 2048 ) {cout " derived::foo() -- ival: " ival endl;return ival;}// ...};Проектировщик
17.5.5. Виртуальные деструкторы
17.5.5. Виртуальные деструкторы В данной функции мы применяем оператор delete:void doit_and_bedone( vector Query* *pvec ){// ...for ( ; it != end_it; ++it ){Query *pq = *it;// ...delete pq;}}Чтобы функция выполнялась правильно, применение delete должно вызывать деструктор того класса, на который указывает pq. Следовательно,
17.5.8. Виртуальные функции, конструкторы и деструкторы
17.5.8. Виртуальные функции, конструкторы и деструкторы Как мы видели в разделе 17.4, для объекта производного класса сначала вызывается конструктор базового, а затем производного класса. Например, при таком определении объекта NameQueryNameQuery poet( "Orlen" );сначала будет вызван
19.2.4. Объекты-исключения и виртуальные функции
19.2.4. Объекты-исключения и виртуальные функции Если сгенерированный объект-исключение имеет тип производного класса, а обрабатывается catch-обработчиком для базового, то этот обработчик не может использовать особенности производного класса. Например, к функции-члену value(),
1.18 Виртуальные Функции
1.18 Виртуальные Функции Предположим, что мы пишем программу для изображения фигур на экране. Общие атрибуты фигуры представлены классом shape, а специальные атрибуты – специальными классами:class shape (* point center; color col; //... public: void move(point to) (* center=to; draw(); *) point where() (* return center; *) virtual void
7.2.8 Виртуальные Функции
7.2.8 Виртуальные Функции Виртуальные функции преодолевают сложности решения с пмощью полей типа, позволяя программисту описывать в базовом классе функции, которые можно переопределять в любом проиводном классе. Компилятор и загрузчик обеспечивают правильное
8.5.4 Виртуальные Функции
8.5.4 Виртуальные Функции Если базовый класс base содержит virtual (виртуальную) (#8.1) функцию vf, а производный класс derived также содержит функцию vf, то обе функции должны иметь один и тот же тип, и вызов vf для объекта класса derived вызывает derived::vf. Например:struct base (* virtual void vf (); void f (); *);class
Виртуальные открытки
Виртуальные открытки В последнее время довольно популярными стали службы, позволяющие посылать по почте виртуальные открытки, например поздравительные (рис. 19.12). Рис. 19.12. Пример виртуальной открытки.Вкратце данный процесс можно описать так. Пользователь отправляется