位置:成都粤嵌教育IT技术培训机构 > 学校动态 > 如何把C++的源程序改写成C语言
函数Ixx为类xx的构造函数的实现。 原类的成员函数改为前缀为结构体名+‘_’的函数。 函数指针U为原类的析构函数的声明; U+结构体名称为原类的析构函数的实现; Fun-_+结构体名为对该结构体成员函数指针进行指向; 以后遇到上述情况将不再说明。
1)对于类的数据成员可以直接转为C中结构体的数据成员。
2)函数则需转化为对应的函数指针,因为struct里不允许出现函数的声明和定义。而函数前如果有virture,inline等修饰符也要去掉,如函数void funca(int a);改为void (*funca)(struct B *p,int a);大家可以看到函数指针的原型里加了一个指针struct B的指针,这是因为要在函数内部对类的成员进行操作,要靠该指针指定结构体的成员。在类的成员函数里,实际上在参数列里也隐含有一个指向自身的this指针。
3)对于静态成员则要定义成全局变量或全局函数,因为结构体中不能有静态成员。
如下例所示
class A
{
public:
A();
~A();
void func(int a);
private:
int b;
};
A::A()
{
b=0;
}
void A::func(int a)
{
b=a;
}
typedef struct classA A;
struct classA
{
void (*A)(struct classA *p);//构造函数指针
void (*U)(struct classA *p);//析构函数指针
void (*func)(struct classA *p,int a);
int b;
};
void fun_A(A *p)
{
p->func=classA_func; //将函数指针初始化
}
void IA(A *p) //构造函数,命名规则在类名前加I
{
fun_A(p);
p->b=0; //原构造函数所作部分
}
void classA_func(A *p,int a)
{
p->b=a;
}
A *s=(A*)malloc(sizeof(A)); s->A=IA; s->A(s);
如果将子类指针赋给基类指针,基类指针在释放的时候不考试虑调用哪个函数名的析构函数,只需调用成员函数U即可。
成员函数U需要像一般成员函数一样在fun_类名()函数中指定。类的析构函数是由系统调用的,在C中则要显式调用。至于何时调用,要准确判断。
作为参数传给函数。(additem(Itema))
作为函数返回值。
实例化类时作参数。
内联函数和虚函数的修饰符inline 、virture 要全部去掉。内联函数体则要去掉,将内联函数在外面定义成一个函数。如:
class B
{
…
virture void funb();
inline int add()const {return a+b;};
private:
int a;
int b;
…
}
typedef classB B; struct classB { … void (*funb)(struct classB *p); int (*add)(struct classB *p); int a; int b; } void classB_funb(B *p) { … } int classB_add(B *p) { return p->a+p->b; } void fun_classB(B *p) { … p->funb=classB_funb; p->add= classB_add; }
尊重原创文章,转载请注明出处与链接:http://www.peixun360.com/5730/news/521186/违者必究! 以上就是成都粤嵌教育IT技术培训机构 小编为您整理 如何把C++的源程序改写成C语言的全部内容。