纯粹的虚拟朋友课程
Pure Virtual Friend Class
我有一个类A
,它有一个指向纯虚拟类B
实例的指针。类C
派生自B
,将自动具有指向A
(它是它的父级)的指针,并且需要访问它的成员。这可以通过在类A
中添加friend class C
来实现,尽管这对于从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
?
由于友谊不是继承的,因此需要将所有依赖友谊的功能封装到基类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
,这有助于封装。
相关文章:
- 虚拟决赛作为安全
- PowerPC ppc64le上的Gcc Woverloaded虚拟错误
- 如何在C++中获得"静态纯虚拟"功能?
- C++无法定义虚拟函数 OUTER 类和头文件
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 在模板基类中为继承类中的可选重写生成虚拟方法
- 尝试将unique_ptrs推送到向量时使用纯虚拟函数错误
- 一位朋友将模板函数缩写为clang和gcc
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 大小虚拟继承中的派生类
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- 使用 C++ 和 i2c 工具从虚拟 i2c 写入和读取
- 重载 -> shared_ptr 个实例中的箭头运算符<interface>,接口中没有纯虚拟析构函数
- 班级的朋友是不可接近的
- 类似虚拟的朋友功能?
- 我们如何将Ostream函数作为类的成员函数实现,而不是作为朋友函数,以便我可以用作虚拟函数
- C++11 纯虚拟类的朋友无法访问私有方法
- 朋友调用虚拟私有方法-应该发生什么
- 虚拟功能不能是朋友
- 纯粹的虚拟朋友课程