Запрет наследование от класса в c++

212
17 марта 2018, 18:01
class Base;
class Lock
{
    Lock() {}
    friend class Base;
};
class Base : virtual private Lock
{
public:
    void foo()
    {
        std::cout << "Hello world" << std::endl;
    }
};
class Derived : public Base
{
};
int main()
{
    Derived obj;
    obj.foo();

    return 0;
}

обьясните пож в чем тут роль virtual ... если наследовать от класса Lock без virtual то код компилируется а так выдает ошибу

note: ‘Derived::Derived()’ is implicitly deleted because the default definition would be ill-formed: class Derived : public Base

Answer 1

При виртуальном наследовании порядок вызова конструкторов нарушается, и конструктор виртуального базового класса Lock будет вызываться классом Derived. Однако у класса Derived нет доступа к приватному конструктору Lock::Lock().

READ ALSO
Как загрузить скетч с одного Arduino на другой?

Как загрузить скетч с одного Arduino на другой?

Есть две Arduino Mega 2560Как можно загрузить скетч на одну из Arduino, используя USB кабель, ПК и другую Arduino?

189
Загрузка музыки в вк

Загрузка музыки в вк

Пытаюсь загрузить аудиофайл через api вк (с++, qt)Загрузка на сайт проходит нормально, но при попытке вызвать метод api

204
Задача на с++ (Жадные алгоритмы) [требует правки]

Задача на с++ (Жадные алгоритмы) [требует правки]

Не могу придумать идею для решения данной задачи, ищу помощи

194