от
Я наткнулся на следующую программу в
C  
:
template 
class Foo {
    Foo() {};
    friend T;
};
class Bar : public virtual Foo {
     void doPrivateStuff();
public:
     template
     void baz(T a) { cout 
Это говорит о том, что, используя этот способ, невозможно наследовать от
Bar
. У меня есть два вопроса: Что заставляет компилятор не разрешать наследовать от
Bar
? Могу ли я наследовать это виртуально? Я знаю, что
friend
используется для объявления метода или класса, который может обращаться к закрытым полям и методам класса, но что означает
friend T
? Он основан на следующей странице:              

Пожалуйста, войдите или зарегистрируйтесь для публикации ответа на этот вопрос.

1 Ответ

0 голосов
от
Виртуально наследуемый класс всегда становится прямым суперклассом самого производного класса. Другими словами, все, что наследует от
Bar
, будет напрямую наследоваться от
Foo
...