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

How to convert C++ inherited classes with functions to C style?

本文关键字:转换 样式 函数 C++ 继承      更新时间:2023-10-16

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

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. 支持等效于简单类,即只有成员变量但没有成员函数的类。
  2. 支持等效于具有非虚拟成员函数的类。
  3. 支持等效于具有非虚拟成员函数以及虚拟成员函数的类。

处理基类和派生类

  1. 支持等效于仅具有成员变量而没有任何成员函数的简单派生类,既不在基类中也不在派生类中。
  2. 仅支持具有非虚拟成员函数的派生类的基类。
  3. 支持在基类和派生类
  4. 中具有非虚拟成员函数的派生类的等效项。
  5. 仅支持在基类中具有虚拟成员函数以及非虚拟成员函数的派生类的等效网络。
  6. 支持等效于具有虚拟成员函数的派生类,
  7. 以及基类和派生类中的非虚拟成员函数。

不要尝试处理任务,除非您已完成上述列表中之前的所有任务。

希望有帮助。