如何将C++继承的带有函数的类转换为C样式?
How to convert C++ inherited classes with functions to C style?
我被要求将以下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.
}
你试图同时承担太多任务。我建议逐步添加功能。
只处理一个类
- 支持等效于简单类,即只有成员变量但没有成员函数的类。
- 支持等效于具有非虚拟成员函数的类。
- 支持等效于具有非虚拟成员函数以及虚拟成员函数的类。
处理基类和派生类
- 支持等效于仅具有成员变量而没有任何成员函数的简单派生类,既不在基类中也不在派生类中。
- 仅支持具有非虚拟成员函数的派生类的基类。 支持在基类和派生类
- 中具有非虚拟成员函数的派生类的等效项。
- 仅支持在基类中具有虚拟成员函数以及非虚拟成员函数的派生类的等效网络。 支持等效于具有虚拟成员函数的派生类,
- 以及基类和派生类中的非虚拟成员函数。
不要尝试处理任务,除非您已完成上述列表中之前的所有任务。
希望有帮助。
相关文章:
- 如何修复函数样式强制转换或类型构造的预期"("?
- 功能样式转换从 'int' 到 'ItemType' 的匹配转换
- C 样式转换引用
- C++显式类型转换(C 样式强制转换)的强制表示法和static_cast的多种解释
- 枚举类的 C 样式强制转换到基础类型 char 的引用
- C++:禁用 CMake 中的旧样式转换警告
- 替换 c++ 中的 c 样式强制转换 (long&)
- 我需要将阵列样式的邻接矩阵转换为矢量样式(以使其看起来更好)
- 用于 protobuf 转换的大括号初始化样式构造函数
- 将 c 样式强制转换转换为正确的 c++ 转换
- Windows VC++编译器允许一种奇怪的c样式转换方式(或者它可能不是转换??)
- 如何将C++继承的带有函数的类转换为C样式?
- 使用C库的C 程序 - 将智能指针转换为RAW C样式指针
- 从整数到枚举的首选转换样式 QEvent::Type
- 转换为C样式字符串
- interpret_cast和c样式强制转换是否兼容(按照c++标准)
- 将C样式铸造为C 样式铸造的转换
- 以 c++11 样式键入转换的正确方法
- 为什么 C 样式的转换有效,而reinterpret_cast则无效?
- calloc c c样式指针转换为c++转换样式