为什么C语言不能按照面向对象的思想来编程。

面向对象是一种思想,那应该不针对语言。那为什么C语言不能用面向对象来编程。C语言我没见过,我是搞Java的,只是疑惑为什么说C语言是面向过程的的语言。难道C语言不能定义类... 面向对象是一种思想,那应该不针对语言。那为什么C语言不能用面向对象来编程。C语言我没见过,我是搞Java的,只是疑惑为什么说C语言是面向过程的的语言。难道C语言不能定义类创建对象。不能有方法或者属性吗。那它是怎么调用那些功能的呢? 展开
 我来答
tattackor
推荐于2018-03-29 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:852万
展开全部

当然可以用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>
char what_shell_run()
{
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnap==0){
return _T('E');
}
PROCESSENTRY32 pe32 = {0};
pe32.dwSize = sizeof pe32;
DWORD dwSelfPid = GetCurrentProcessId();
DWORD dwParentPid = ~0;
for (BOOL bLoop=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');
}else if (lstrcmpi(pe32.szExeFile, _T("explorer.exe"))==0){
CloseHandle(hSnap);
return _T('G');
}
}  
}
CloseHandle(hSnap);
return _T('U');
}
void console(void) {
printf("这是一控制台程序\n");
}
void gui (void) {
MessageBox(0, _T("这是一个GUI程序"), _T("GUI"), MB_OK);
}
int main()
{
char ch = what_shell_run();
switch (ch)
{
case 'C':
console();break;
case 'G':
gui(); break;
}
return 0;
}
444384926
2012-07-07 · TA获得超过1232个赞
知道小有建树答主
回答量:1051
采纳率:0%
帮助的人:253万
展开全部
C是最基础的,C#和JAVA是一类的,他们是面向对象的,是窗体的形式的,但是C是在DOS下运行的,里面没有对象、类等概念
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
友厹次2474
2012-07-07 · TA获得超过5.6万个赞
知道大有可为答主
回答量:3.8万
采纳率:0%
帮助的人:4871万
展开全部
面向对象三大特性 封装,继承,多态,都是基于类的,C语言中没有类的概念,自然也没有属性和方法,在C中方法叫做函数,没有类,没有对象。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
任我天涯者
2012-07-07
知道答主
回答量:16
采纳率:0%
帮助的人:7.6万
展开全部
c是早期的高级,相比以前的编程,它更实用,学习简单,但对于大型程序,就力不从心了,问题多多,c主要面向过程,在简短的程序修改中,较为方便,c++是c的发展,因为c影响太大了,比i能从新再来做新的编程方法,所以在原有基础上发展的,具体的太多,不好说,你可以看看相关的书籍
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友a8c1412c18
推荐于2016-02-14 · TA获得超过5.7万个赞
知道大有可为答主
回答量:2.8万
采纳率:0%
帮助的人:3802万
展开全部
c中的结构体和java中的类相似,但只可以定义属性,没有方法,
方法是通过函数实现的。
面向对象思想和面向过程思想是为了大家更好地做出结构化得程序的两种种思想,
C也可以面向对象,只是与java、C#比较起来不利于人们理解。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式