如何将具有函数的C ++继承类转换为C样式?

时间:2019-04-06 05:26:12

标签: c++ c

我被要求将以下C++代码更改为C。 我几乎确定C++类可以转换为C结构。 但是,如果这些类是继承的类,并且包含一些函数,会发生什么情况?我应该使用指向函数的指针吗?如果这些函数是Parent类的呢?

class A {
  protected:
       int x;
  public:
       A():x(0){}
       virtual void Method1()const {}
       virtual void Method2(){}
       void Method3()const {}
       virtual ~A() {}
};

class B : public A {
  public:
       virtual void Method1() {}
       virtual void Method4() const {}
       virtual ~B(){}
};

void main(){
       B* b;
       b = new B;
       b->Method1();
       b->Method2();
       b->Method3();
       b->Method4();
}


这是我的部分解决方案(仅针对“主要” 部分)。我假设“方法”函数是结构a和b中函数的指针。可以吗?

void main(){
   B* b;
   A* a;
   b = (B*)malloc(sizeof(B));
   a = (A*)malloc(sizeof(A));
   if ((b==NULL)||(a==NULL)) // memory alloc. check
       return;
   b->Method1=Method1_t; 
   b->Method2=Method2_t(a);
   b->Method3=Method3_t(a);
   b->Method4=Method4_t;
   // MethodX_t are written as functions outside structs, main.
}

1 个答案:

答案 0 :(得分:0)

您正尝试一次执行太多任务。我建议逐步添加功能。

仅上一堂课

  1. 支持等效于简单类的类,即仅具有成员变量但没有成员函数的类。
  2. 支持具有非虚拟成员函数的类的等效项。
  3. 支持具有非虚拟成员函数和虚拟成员函数的类的等效项。

具有基类和派生类的交易

  1. 在基类和派生类中都支持仅包含成员变量而没有任何成员函数的简单派生类的等效类。
  2. 仅使用基类支持具有非虚拟成员函数的派生类的等效项。
  3. 支持在基类以及派生类中具有非虚拟成员函数的派生类的等效对象。
  4. 仅在基类以及非虚拟成员函数中支持带有虚拟成员函数的派生类的等效项。
  5. 在基类和派生类中支持具有虚拟成员函数以及非虚拟成员函数的派生类的等效对象。

除非您已完成上面列表中所有之前的工作,否则不要尝试执行任务。

希望有帮助。