在c语言中怎样用c++类中的对象调用c++类中的方法?

2024-12-02 07:08:23
推荐回答(4个)
回答1:

这个问题很有意思,我之前还没碰到过呢,我帮你在全球最大的编程论坛stackoverflow上搜了一个答案:
这个答案大意是说,C语言没有this指针,所以要自己写一个wrap API来封装C++的对象。
这个论坛高手云集,包括很多业界大拿,所以这个答案还是很可信的。下面的api.h 就是你要写的wrap API

C has no thiscall notion. The C calling convention doesn't allow directly calling C++ object member functions.
Therefor, you need to supply a wrapper API around your C++ object, one that takes the this pointer explicitly, instead of implicitly.
Example:

// C.hpp
// uses C++ calling convention
class C {
public:
bool foo( int arg );
};

C wrapper API:

// api.h
// uses C calling convention
#ifdef __cplusplus
extern "C" {
#endif

void* C_Create();
void C_Destroy( void* thisC );
bool C_foo( void* thisC, int arg );

#ifdef __cplusplus
}
#endif

Your API would be implemented in C++:

#include "api.h"
#include "C.hpp"

void* C_Create() { return new C(); }
void C_Destroy( void* thisC ) {
delete static_cast(thisC);
}
bool C_foo( void* thisC, int arg ) {
return static_cast(thisC)->foo( arg );
}

回答2:

之间的差异的C语言和C + +有很多:
新的程序程序思维,C语言是面向过程的,和C + +对象。

2,C语言的标准库,他们是松散的,但在头文件中相同的功能和C + +的大部分功能都集成非常紧密,特别是C语言不是在C + + API Window系统最API的有机结合,是一个集体。但你也可能是一个单独的API调用。

3,特别是在C + +图形处理,图形和语言有很大的不同。在C语言中的图形处理功能,基本上不被使用在C + +。 C语言标准不包括图形处理。

4,C和C + +的概念的结构,但只有在C语言结构的成员变量,并没有在C + +结构的成员方法,它可以有自己的成员变量和成员函数。在C语言中的结构成员是公共的,想参观它可以访问,VC + +,它不添加预选赛私人。

C语言写了很多方面的程序,但C + +可以写出更多更好的C + +写基于DOSR程序,写一个DLL,写控制,书写系统。

语言程序文件的组织是松散的,几乎所有的被处理;而C + +项目文件组织,每个文件分类清晰。

6,C + + IDE中是很聪明,和VB,部分功能可能比VB强。

C + +可以自动生成你想要的程序,这样就可以节省大量的时间结构。可用的工具有很多,如添加MFC类时,添加变量。

8,一个额外的工具,在C + +系统的分析了很多,你可以查看API;视图控制。

9,调试功能强大和多样化

* C语言是面向过程的,而C + +面向对象*

回答3:

C语言是面向程序的语言,而C++是面向对象的。(对象即类)
C语言不支持对象这一概念,所以不能使用类。你可以用C++把你要的方法编译成dll,
然后再在C语言里面load这个dll中你要的方法就行了。

回答4:

C语言或者说C编译器不支持这个功能,你干脆用C++语言写程序,语法可以用C的(因为可以兼容)。