Программирование. Принципы и практика использования C++ Исправленное издание, стр. 196
struct Shape { // ... virtual void draw_lines() const; virtual void move(); // ...}; virtual void Shape::draw_lines() const { /* ... */ } // ошибка void Shape::move() { /* ... */ } // OK14.3.3. Замещение
struct Circle:Shape { void draw_lines(int) const; // возможно, ошибка (аргумент int?) void drawlines() const; // возможно, ошибка (опечатка в имени?) void draw_lines(); // возможно, ошибка (нет const?) // ...};В данном случае компилятор увидит три функции, независимые от функции
Shape::draw_lines()Пример функции
draw_lines()struct B { virtual void f() const { cout << "B::f "; } void g() const { cout << "B::g "; } // невиртуальная};struct D : B { void f() const { cout << "D::f "; } // замещает функцию B::f void g() { cout << "D::g "; }};struct DD : D { void f() { cout << "DD::f "; } // не замещает функцию D::f (нет const) void g() const { cout << "DD::g "; }};Здесь мы описали небольшую иерархию классов с одной виртуальной функцией
f()f()g()BBvoid call(const B& b) // класс D — разновидность класса B, // поэтому функция call() может // получить объект класса D // класс DD — разновидность класса D, // а класс D — разновидность класса B, // поэтому функция call() может получать объект класса DD{ b.f(); b.g();}int main(){ B b; D d; DD dd; call(b); call(d); call(dd); b.f(); b.g(); d.f(); d.g(); dd.f(); dd.g();}В результате выполнения этой программы получим следующее:
B::f B::g D::f B::g D::f B::g B::f B::g D::f D::g DD::f DD::gЕсли вы понимаете, почему, то знаете механизмы наследования и виртуальных функций.
14.3.4. Доступ
• Закрытые (private). Если член класса объявлен с помощью ключевого слова
private• Защищенные (protected). Если член класса объявлен с помощью ключевого слова
protected• Открытые (public). Если член класса объявлен с помощью ключевого слова
publicИзобразим это на рисунке.

Базовый класс также может иметь атрибут
privateprotectedpublic• Если базовый класс для класса
DD• Если базовый класс для класса
DDD• Если базовый класс для класса
D