AD
наследуется в частном порядке от P
, но публично от R
. На практике это означает, что открытые методы, объявленные в R
, будут по-прежнему доступны в AD
, но открытые методы, объявленные в P
, но не в R
, не будут доступны в AD
. Так, например, если P
выглядело так:
class P : public virtual R, private RA
{
public:
P() : RA() {};
void doWorkP() { std::cout << "doWorkP" << std::endl; }
};
Вы могли бы получить доступ к doWork
через AD
, но не doWorkP
.
Если вы хотите сделать методы R
недоступными в AD
, просто наследуйте от R
в частном порядке.