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
При виртуальном наследовании порядок вызова конструкторов нарушается, и конструктор виртуального базового класса Lock будет вызываться классом Derived. Однако у класса Derived нет доступа к приватному конструктору Lock::Lock().
Сборка персонального компьютера от Artline: умный выбор для современных пользователей