Bro*_*ier 4 c++ polymorphism friend pure-virtual
我有一个类A,它有一个指向纯虚拟类的实例的指针B.类C派生自B并将自动具有指向A(其父级)的指针,并且需要访问其成员.这可以通过添加friend class C内部类来实现A,尽管这对于将派生的每个类都是必需的B.
代码示例:
class A
{
public:
friend class B; // This does not allow derived classes to be friends
friend class C; // Now derived class B has access to `DoDomething`, but then this is needed for every single derived class
private:
void DoDomething();
};
class B
{
virtual void Tick() = 0;
protected:
A* m_pointerToA; // <- is being set upon creating automatically
};
class C : public class B
{
virtual void Tick()
{
m_pointerToA->DoSomething();
}
};
Run Code Online (Sandbox Code Playgroud)
有没有办法让所有派生类B都能访问A他们指向的私有和受保护的类成员,而不必friend class X为每个派对添加?
由于友谊不是继承的,因此您需要将依赖于友谊的所有功能包装到基类的受保护功能中B.这将让所有来自B访问功能的类A都需要"交友":
class B {
virtual void Tick() = 0;
protected:
A* m_pointerToA; // <- is being set upon creating automatically
void callDoSomething() {
m_pointerToA->DoSomething();
}
};
class C : public class B {
virtual void Tick() {
std::cout << "Class C is about to tick..." << std::endl;
callDoSomething();
}
};
class D : public class B {
virtual void Tick() {
callDoSomething();
std::cout << "Class D has just ticked!" << std::endl;
}
};
Run Code Online (Sandbox Code Playgroud)
这有效地将您的类层次结构中使用友谊的区域本地化为类B,这有助于封装.