Я нашел этот код hereкласс, который не может быть получен
class Usable;
class Usable_lock {
friend class Usable;
private:
Usable_lock() {}
Usable_lock(const Usable_lock&) {}
};
class Usable : public virtual Usable_lock {
// ...
public:
Usable();
Usable(char*);
// ...
};
Usable a;
class DD : public Usable { };
DD dd; // error: DD::DD() cannot access
// Usable_lock::Usable_lock(): private member
Может кто-нибудь объяснить мне этот код?
EDIT: Еще один вопрос, который у меня есть, является тем, что является виртуальным деривацией и когда это необходимо?
Обратите внимание, что этот класс не выполняет то, что он говорит на олове, - это не предотвращает вывод. Если бы это произошло, получилось бы сообщение об ошибке в точке, на которой фактически получен класс. – 2010-04-14 12:39:13
Это статья о виртуальном наследовании: http://en.wikipedia.org/wiki/Virtual_inheritance. Почему виртуальное наследование используется здесь? Чтобы предотвратить множественные проблемы наследования, когда класс Usable получен из какого-либо другого класса, кроме Usable_lock. –
Попробуйте изменить эту ссылку вместо этого: http://www2.research.att.com/~bs/bs_faq2.html#no-derivation «Он полагается на то, что самый производный класс в иерархии должен построить виртуальная база ". Класс DD делает это. –