Скрыть метод в наследуемом классе

173
05 августа 2018, 07:10

Есть необходимость переопределить видимость метода наследуемого от базового, или запретить его переопределение.

Я пробовал переопределить так:

class some_super_class
{
...
protected:
    virtual void some_protected_method();
...
}
class some_child_class : protected some_super_class
{
private:
    some_super_class::some_protected_method();
}

Но по каким то причинам таким образом я не могу получать доступ к методам, членам класса находящимся внутри класса some_child_class только внутри метода some_protected_method();.

Как правильно переопределить видимость у наследуемого объекта?

Answer 1

Для того, чтобы запретить переопределение виртуальной функции в производном классе можно использовать контекстно-зависимое слово final:

struct B {
    virtual void f() final;
};
struct D : B {
    void f() override; // Ошибка из-за попытки переопределения final функции
};

Видимость функции тоже можно поменять в производном классе, однако из-за виртуальности функций к ней всё равно можно будет обратиться через указатель/ссылку на базовый класс:

struct B {
    virtual void f() {};
};
struct D : B {
private: // делаем приватной
    void f() override {};
};
int main()
{
    D* d = new D;
    B* b = d;
    d->f(); // ошибка из-за приватного доступа
    b->f(); // OK. Вызовется именно D::f()
}
READ ALSO
Как получить число идущее после запятой введённой переменной типа double в C++? (например, ввели 14.25 - вывело 25)

Как получить число идущее после запятой введённой переменной типа double в C++? (например, ввели 14.25 - вывело 25)

Примерно продумал синтаксис, но выводит число неправильноАлгоритм такой: число оставить без его целой части, далее умножать на 10 до тех пор,...

166
Не работает codeblocks на linux ubuntu

Не работает codeblocks на linux ubuntu

Я только недавно решил установить себе впервые линуксПроблема в следующем, при сборке выдает вот это :

183
Параметризовать компаратор

Параметризовать компаратор

Вот такую задачку "нарезали", не знаю с какой стороны подойтиМожет кто поможет

206