8.15. Вызов виртуальной функции родительского класса
8.15. Вызов виртуальной функции родительского класса
Проблема
Требуется вызвать функцию родительского класса, но она переопределена в производном классе, так что обычный синтаксис p->method() не дает нужного результата.
Решение
Укажите полное имя вызываемого метода, включая имя родительского или базового класса (если есть только два класса, например). (См. пример 8.16.)
Пример 8.16. Вызов определенной версии виртуальной функции
#include <iostream>
using namespace std;
class Base {
public:
virtual void foo() {cout << "Base::foo()" << endl;}
};
class Derived : public Base {
public:
virtual void foo() {cout << "Derived::foo()" << endl;}
};
int main() {
Derived* p = new Derived();
p->foo(); // Вызов версии производного класса
p->Base::foo(); // Вызов версии базового класса
}
Обсуждение
Регулярное использование переопределения полиморфных возможностей C++ является плохой идеей, но иногда это требуется сделать. Как и в случае с большинством других методик С++, это по большей части вопрос синтаксиса. Когда требуется вызвать определенную версию виртуальной функции базового класса, просто укажите ее имя после имени этого класса, как это сделано в примере 8.16.
p->Base::foo();
Здесь будет вызвана версия foo, определенная в Base, а не та, которая определена в каком-то из подклассов Base, на который указывает p.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Пример кода родительского процесса
Пример кода родительского процесса #include <stdio.h>#include <stdlib.h>#include <string.h>#include <process.h>#include <sys/neutrino.h>#include <sys/netmgr.h>#include <spawn.h>#include <errno.h>#include <unistd.h>#include <sys/wait.h>#include <locale.h>int main(int argc, char **argv) { int nid; // Дескриптор удаленного узла int PChanid; //
Многократный вызов функции connect для сокета UDP
Многократный вызов функции connect для сокета UDP Процесс с присоединенным сокетом UDP может снова вызвать функцию connect Для этого сокета, чтобы:? задать новый IP-адрес и порт;? отсоединить сокет.Первый случай, задание нового собеседника для присоединенного сокета UDP, отличается
Глава 12 Настройка родительского контроля
Глава 12 Настройка родительского контроля 12.1. Ограничения по времени12.2. Игры12.3. Разрешение и блокировка конкретных программВпервые с понятием родительского контроля пользователи столкнулись в операционной системе Windows Vista. Задумка достаточно интересная: вы можете
R.5.2.2 Вызов функции
R.5.2.2 Вызов функции Вызов функции является постфиксным выражением, за которым следует, возможно пустой, список выражений в скобках, разделенных запятой. Эти выражения образуют фактические параметры функции. Постфиксное выражение должно иметь тип "функция, возвращающая T",
R.13.4.4 Вызов функции
R.13.4.4 Вызов функции Вызов функции есть конструкция вида:первичное-выражение ( список-выражений opt )Она считается бинарной операцией, в которой первичное-выражение представляет первый операнд, а список-выражений (возможно пустой), - второй операнд. Именем, задающим функцию,
Правило 23: Предпочитайте функциям-членам функции, не являющиеся ни членами, ни друзьями класса
Правило 23: Предпочитайте функциям-членам функции, не являющиеся ни членами, ни друзьями класса Возьмем класс для представления Web-браузера. В числе прочих такой класс может предлагать функции, который очищают кэш загруженных элементов, очищают историю посещенных URL и
Вызов функции с аргументом: фактические аргументы
Вызов функции с аргументом: фактические аргументы Задача в данном случае состоит в том, чтобы присвоить некоторую величину формальному аргументу number. После того как эта переменная получит свое значение, программа сможет выполнить свою задачу. Мы присваиваем
5.4.2. Взаимодействие родительского и дочернего процессов
5.4.2. Взаимодействие родительского и дочернего процессов Функция pipe() создает два файловых дескриптора, которые действительны только в текущем процессе и его потомках. Эти дескрипторы нельзя передать постороннему процессу. Дочерний процесс получает копии дескрипторов
Вызов функции
Вызов функции Вызов функции передает управление и фактические аргументы (если они есть) заданной функции. Синтаксически вызов функции имеет следующий вид:<выражение>([<список выражений>])<Выражение> вычисляется, и его результат интерпретируется как адрес
Вызов функции с переменным числом аргументов
Вызов функции с переменным числом аргументов Для вызова функции с переменным числом аргументов не требуется никаких специальных действий: в вызове функции просто задается то число аргументов, которое нужно. В предварительном объявлении (если оно есть) переменное число
13.3. Функции-члены класса
13.3. Функции-члены класса Функции-члены реализуют набор операций, применимых к объектам класса. Например, для Screen такой набор состоит из следующих объявленных в нем функций-членов:class Screen {public:void home() { _cursor = 0; }char get() { return _screen[_cursor]; }char get( int, int );void move( int, int );bool checkRange( int, int );int
17.5.3. Статический вызов виртуальной функции
17.5.3. Статический вызов виртуальной функции Вызывая виртуальную функцию с помощью оператора разрешения области видимости класса, мы отменяем механизм виртуализации и разрешаем вызов статически, на этапе компиляции. Предположим, что мы определили виртуальную функцию isA()
6.8 Вызов Функции
6.8 Вызов Функции Вызов функции, то есть запись выражение(список_выражний), можно проинтерпретировать как бинарную операцию, и операцию вызова можно перегружать так же, как и другие оперции. Список параметров функции operator() вычисляется и прверяется в соответствие с
Компоненты класса и АТД функции
Компоненты класса и АТД функции Для понимания отношений между утверждениями и АТД необходимо, прежде всего, установить отношение между компонентами класса и их двойниками - АТД функциями. В свете прежних обсуждений функции подразделяются на три категории: создатели,
Практическая работа 60. Настройка родительского контроля
Практическая работа 60. Настройка родительского контроля Задание. Настроить ограничения при использовании компьютера детьми и проверить их работу. ВНИМАНИЕ Это задание можно выполнить только в версиях Windows Vista Home Basic, Home Premium и Ultimate и только при использовании учетной