我有一个类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();
}
};是否有一种方法可以使来自B的所有派生类能够访问它们所指向的类A的私有成员和受保护成员,而不必为每个类添加friend class X?
发布于 2015-11-23 21:26:03
由于友谊不是继承的,所以需要将依赖友谊的所有功能封装到基类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;
}
};这有效地将类层次结构中使用友谊的区域定位为类B,这有助于封装。
https://stackoverflow.com/questions/33880911
复制相似问题