C++ 相关的继承层次

标签 c++ inheritance

有一个 C 代码,我们正在尝试将其转换为 C++ 代码。有两个继承层次结构,由 C 通过 switch..case 管理。这已被转换为使用 C++ 中的虚函数。现在,在某一时刻,这两个层次结构必须相关联。例如,A 类与 A1 相关,B 类与 B1 相关......其中 A、B、C 属于层次结构 1,A1、B1、C1 属于层次结构 2。 在 C 代码中,这是通过将层次结构 2 的标记字段(或 switch..case 中使用的类型字段)存储在 A、B、C 中来实现的。有人可以指导我如何干净地实现这个 C++ 吗?

在 C 中

enum NodeTag1
{
  A_Node
  , B_Node
  ....  
};

enum NodeTag2
{
   A1_Node
   , B1_Node
   ....
};

struct Node
{
   NodeTag1 tag1;
};

struct A
{
     NodeTag1 tag1;
     NodeTag2 tag2;
     ..other members...
};

struct B, C 看起来都一样。

现在假设有 10 个函数(f1、f2..)使用 NodeTag1 进行切换.. 案例 在 C++ 中

class Node {  //10 virtual functions (f1,f2 ..)};
class A : public Node { // 10 virtual function( f1, f2.. ) };
class B : public Node { // 10 virtual function( f1, f2.. ) };

现在有一个这样的函数,它从层次结构 1 的实例中调用。

int decide( NodeTag2 tag2 )
{
   switch(tag2)
   {
      ...
   }
}

我如何在 C++ 中实现这一点?

谢谢, 悟空。

最佳答案

如果您不想在运行时创建对象。您可以使用以下方法。只创建一次对象。 由于您不需要访问类的成员,单个对象将完成您的工作;

class A
{

public:

 virtual f()
 {
  printf("A");
 }

 static A* behaveLikeA();

 static A* behaveLikeB();
};

class B : public A
{

public:

 virtual f()
 {
  printf("B");
 }
};

A* A::behaveLikeA()
{
 static A ag;
 return &ag;
}

A* A::behaveLikeB()
{
 static B bg;
 return &bg;
};


int main(int argc, char* argv[])
{

 A* b = A::behaveLikeB();
 b->f();

 b = A::behaveLikeA();
 b->f();
 return 0;
}

关于C++ 相关的继承层次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3796328/

相关文章:

c++ - 同名继承函数和重写虚函数有什么区别?

c++ - Eclipse,C++,如何打开/关闭在线解析的#define

java - 算术右移存在哪些实际用例?

c++ - 在宏中替换 #defined 值

javascript - 为什么子类型必须在子类型函数之外为其原型(prototype)分配一个父对象?

c++ - 通过组合避免额外的堆分配(过度继承)?

c++ - 使用带有 clang++ 而不是 g++ 的 std::acos 的 Constexpr 编译错误

C++ 异步编程,如何不等待 future ?

java - 扩展或重写外部基类以添加随后也存在于外部子类中的功能

python - 包装python父类(super class)的所有方法