/*
2016年7月27日10:28:49
文件"compilation.cpp"
*/
#include "compilation.h"
#include <stdio.h>
extern "C" {int add(int x,int y);}//非成员函数
int add(int x,int y)
{
return x + y;
}
//以下为成员函数
double C::f(int i)
{
add(i);
printf("Hello World! \n%d\n",i);
return i;
}
double C::f(double i)
{
add(i);
printf("Hello World! \n%f\n",i);
return i;
}
void C::add(int &a)
{
a += 1;
}
void C::add(double &a)
{
a += 1.1;
}
void C::k(int i)
{
printf("k\n");
}
extern "C" double call_C_f_i(C* p, int i) // wrapper function
{
return p->f(i);
}
extern "C" double call_C_f_d(C* p, double i)// wrapper function
{
return p->f(i);
}
extern "C" void call_virtual_k(C* p,int i)
{
p->k(i);
}
/*
2016年7月27日10:29:16
文件"comilation.h"
*/
#ifndef _COMPILATION_H_
#define _COMPILATION_H_
class C
{
public:
double f(int);
double f(double);
virtual void k(int);
private:
void add(int &a);
void add(double &a);
};
#endif
/*
2016年7月27日9:38:30 文件"main.c"
说明
混合编译:在C中调用C++成员函数,非成员函数
未解决的问题:
虚函数未能实现调用
*/
#include <stdio.h>
/*#include "compilation.h",本来C语言就没有类的说法,所以就不需要包含头C++头文件了,处理方法是将C++成员函数转换成C函数*/
extern int add(int x,int y);
extern double call_C_f_i(struct C* p, int i);
extern double call_C_f_d(struct C* p, double i);
extern void call_virtual_k(struct C* p,int i);
int main(void)
{
printf("%d\n",add(2,1));//调用非成员函数
printf("%f\n",call_C_f_i(NULL,10));//调用成员函数
printf("%f\n",call_C_f_d(NULL,10.1));
//call_virtual_k(NULL,29);//此处未能是实现调用
return 0;
}
/*
在vc++6.0中的结果是:
3
Hello World!
11
11.000000
Press any key to continue
*/