㈠ 在c语言中怎样用c++类中的对象调用c++类中的方法
这个问题很有意思,我之前还没碰到过呢,我帮你在全球最大的编程论坛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<C*>(thisC);
}
bool C_foo( void* thisC, int arg ) {
return static_cast<C*>(thisC)->foo( arg );
}
㈡ 我想弄懂为什么C语言没有面向对象的思想,明明有结构体啊,而且我试验了结构体能实现类的功能
你后缀名都用CPP了。。。哪里是C语言。。C++也是有结构体的好伐。。C和C++的结构体不是一回事,你把后缀名改成c,VS就会用C模式编译。或者直接用gcc进行编译,然后就该报错了
不过C确实可以实现面向对象,典型的glib的gobject就是。。
㈢ c语言和python区别
1、语言类型不同。
Python是一种动态类型语言,又是强类型语言。它们确定一个变量的类型是在您第一次给它赋值的时候。C是静态类型语言,一种在编译期间就确定数据类型的语言。大多数静态类型语言是通过要求在使用任一变量之前声明其数据类型来保证这一点的。
2、对象机制不同。
Python中所有的数据,都是由对象或者对象之间的关系表示的,函数是对象,字符串是对象,每个东西都是对象的概念。每一个对象都有三种属性:实体,类型和值。
C中没有对象这个概念,只有“数据的表示”,比如说,如果有两个int变量a和b,想比较大小,可以用a==b来判断,但是如果是两个字符串变量a和b,就不得不用strcmp来比较了,因为此时,a和b本质上是指向字符串的指针,如果直接用==比较,那比较的实际是指针中存储的值地址。
3、变量类型不同。
python六个标准的数据类型:Number数字、String字符串、List列表、Tuple元祖、Sets集合、Dictionary字典,数字类型有四种类型:整数、布尔型、浮点数和复数。C语言也可分四类:基本类型、枚举类型、void的类型、派生类型。基本类型:整数类型、浮点类型。
㈣ C语言有像JAVA那样的方法和类吗
C语言没有class。只有struct。而且struct不能定义function。
C语言不能像java一样定义class,但是C++可以。
C是面象过程的,而java是面象对象的。
㈤ C语言中没有“类”概念吗
类是体现封装性的,c语言中没有类,在c++\java\c#中使用,实现过程就像结构体一样,类能够实现对内部数据的隐藏,提供一些公有函数,实现某种功能.
㈥ c语言里为什么没有类
类是c++才有的,是从c中的结构体发展而来的。所以说c里面是没有类的,相比之下类更有封装性好的特点。
㈦ 计算机C语言与计算机C++语言有什么区别
二者目前主要应用于电信部门
c++,面向对象程序设计(当然也可以过程设计哦)。网络游戏开发
c
,面向过程程序设计
c++目前市场上通用写。个人愚见
㈧ 为什么C语言不能按照面向对象的思想来编程。
当然可以用C语言进行面向对象编程。
面向对象本身是一种思想,而用哪种语言实现只是一种技术手段。事实上思想和技术的关系本身就是class和object的关系。
class oo {
//这是面向对象的思想类
};
oo java; //java是oo的一个具体的技术实现
oo cxx; //c++是oo的一个具体的技术实现
拿Windows系统来讲,它是有C语言编写的,但是使用的却是面向对象的思想,这方面可以参考reactos(一个免费开源的用于大学教授操作系统原理的windows系统)。
举一个例子也许更实际一些,比如,操作系统有两种操作界面,一种是GUI界面,一种是控制台界面,在windows平台上编写一个程序,在cmd中运行时,执行控制台界面的代码,在GUI中运行的时候,执行图形界面的代码。这实际上也算是一种面向对象编程中的多态实例。以下示例代码在vc6.0编译通过。
#include<stdio.h>
#include<tchar.h>
#include<windows.h>
#include<TLHELP32.H>
charwhat_shell_run()
{
HANDLEhSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hSnap==0){
return_T('E');
}
PROCESSENTRY32pe32={0};
pe32.dwSize=sizeofpe32;
DWORDdwSelfPid=GetCurrentProcessId();
DWORDdwParentPid=~0;
for(BOOLbLoop=Process32First(hSnap,&pe32);bLoop!=FALSE;bLoop=Process32Next(hSnap,&pe32))
{
if(dwSelfPid==pe32.th32ProcessID){
dwParentPid=pe32.th32ParentProcessID;
break;
}
}
if(dwParentPid==~0)return_T('U');
for(bLoop=Process32First(hSnap,&pe32);bLoop!=FALSE;bLoop=Process32Next(hSnap,&pe32))
{
if(dwParentPid==pe32.th32ProcessID){
if(lstrcmpi(pe32.szExeFile,_T("cmd.exe"))==0)
{
CloseHandle(hSnap);
return_T('C');
}elseif(lstrcmpi(pe32.szExeFile,_T("explorer.exe"))==0){
CloseHandle(hSnap);
return_T('G');
}
}
}
CloseHandle(hSnap);
return_T('U');
}
voidconsole(void){
printf("这是一控制台程序 ");
}
voidgui(void){
MessageBox(0,_T("这是一个GUI程序"),_T("GUI"),MB_OK);
}
intmain()
{
charch=what_shell_run();
switch(ch)
{
case'C':
console();break;
case'G':
gui();break;
}
return0;
}
㈨ c语言描述类 对象 方法 属性四者之间区别与联系
对象是人们要进行研究的任何事物,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。具有相同或相似性质的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例化,ASP中set
classname=new
classd()
就是实例化一个类;
对象有它的属性和方法,举例说明,人是一个对象,人的长相和身材就是对象的属性,而说话动作就是对象的方法。
对象的属性也可能是一组集合,举例说明:人这个对象的外表属性包含:长相,身高,体形,气质等。
㈩ c语言2级中象与类是甚么意思
通俗的讲,对象是任何1个存在的,可被计算机用某种情势表达的实物。比如说,1份文件,1首歌,1个按钮等等,只要是计算机中存在的,都可以成为对象。而类,就是某1类对象的总称。比如“某个人”,在计算机里是对象,而“人”,是1类的表述。