为什么C语言不能按照面向对象的思想来编程。
发布网友
发布时间:2022-05-27 13:34
我来回答
共5个回答
热心网友
时间:2023-10-25 18:16
当然可以用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;
}
热心网友
时间:2023-10-25 18:16
C是最基础的,C#和JAVA是一类的,他们是面向对象的,是窗体的形式的,但是C是在DOS下运行的,里面没有对象、类等概念
热心网友
时间:2023-10-25 18:17
面向对象三大特性 封装,继承,多态,都是基于类的,C语言中没有类的概念,自然也没有属性和方法,在C中方法叫做函数,没有类,没有对象。
热心网友
时间:2023-10-25 18:17
c是早期的高级,相比以前的编程,它更实用,学习简单,但对于大型程序,就力不从心了,问题多多,c主要面向过程,在简短的程序修改中,较为方便,c++是c的发展,因为c影响太大了,比i能从新再来做新的编程方法,所以在原有基础上发展的,具体的太多,不好说,你可以看看相关的书籍
热心网友
时间:2023-10-25 18:18
c中的结构体和java中的类相似,但只可以定义属性,没有方法,
方法是通过函数实现的。
面向对象思想和面向过程思想是为了大家更好地做出结构化得程序的两种种思想,
C也可以面向对象,只是与java、C#比较起来不利于人们理解。
为什么C语言不能按照面向对象的思想来编程。
当然可以用C语言进行面向对象编程。面向对象本身是一种思想,而用哪种语言实现只是一种技术手段。事实上思想和技术的关系本身就是class和object的关系。class oo {//这是面向对象的思想类}; oo java; //java是oo的一个具体的技术实现oo cxx; //c++是oo的一个具体的技术实现拿Windows系统来讲,它是...
面向对象的程序设计和C语言的结构化程序设计有什么不同?
侧重点不同。面向对象的语言是将方法封装后形成CLASS,主体函数侧重的是对象的抽象和实现;而结构化C侧重的的是方法的抽象和实现。应该说结构化C是面向对象的语言的基础 结构化设计的思路:由上及下,逐级分解,每级求解,最终完成最初要求的功能 面向对象 的思路:先分析问题的本质,问题在现实中是由哪...
为什么说面向对象编程和函数式编程都有问题
简言之,不论是面向对象编程还是函数式编程,如果你走了极端,那都是错误的。面向对象编程的极端是一切都是对象(纯面向对象)。函数式编程的极端是纯函数式编程语言。面向对象编程的问题 面向对象的问题在于它对“对象”的定义,它试图将所有事情就纳入到这个概念里。这种做法极端化后,你就得出来一个一...
C语言在编操作系统的时候,采用的是面向对象的思想,还是面向过程的思想...
面向对象,面向过程,只是设计方式,与语言无关,只是C并不提供对面向对象设计方式的天然支持。比如我设计这么一个结构:typedef struct _mem_handle { void *base;uint32_t size;uint32_t step;void *mem_alloc(uint32_t size, uint32_t magic_id);void mem_free(void *buf);} mem_handle_t...
软件开发基础?
有一部分程序员会认为C语言是结构化的编程语言无法实现面向对象的编程思想。其实不然,C语言同样可以很好地实现面向对象的编程思想,只不过有些面向对象的工作由程序员来做而已。同样,面向对象的编程语言也可以用于写模块化的程序。\x0d\x0a一种信仰\x0d\x0a就我所接触过的系统里,Windows我只会安装,使用,VC/...
c语言和c++的区别和联系
1、面向对象编程:C语言不支持面向对象编程,而C++语言支持面向对象编程。面向对象编程是一种编程范型,它将数据和操作封装在一起,形成对象。C++语言通过类、继承和多态等机制实现面向对象编程。2、异常处理:C语言不支持异常处理,而C++语言支持异常处理。异常处理是一种处理程序错误的机制,当程序出现错误...
c语言和c++的区别
c语言和c++的区别 据我了解C语言和C++的区别主要体现在以下几个方面: 1. 编程范式:C语言强调的是程序的功能。而C++是面向对象的编程语言。 2. 面向对象特性:C++具有私有函数重载等特性,而C语言不具备。 3. 类型检查:C++检查更严格。 总之,从编程范式和语言特性的角度来看,C++是C语言的扩展和补充。 抢首赞 ...
软件开发的基础知识是什么
有些语言是在模块化大行其道的历史背景下被发明出来的,如C语言,而有些语言则是为了满足面向对象的编程思想而构造出来的,如C++。有一部分程序员会认为C语言是结构化的编程语言无法实现面向对象的编程思想。其实不然,C语言同样可以很好地实现面向对象的编程思想,只不过有些面向对象的工作由程序员来...
编程中如何理解面向对象
因为汇编是面向过程的的编程语言,而c语言等是面向对象的编程。简而言之,比如看到了一个苹果,想吃她,用汇编的话,首先需要寻找苹果,然后拿起,最后才是吃掉,要计算每个步骤,这就是面向过程的。而面向对象的编程,就是以结果为导向,比如c++吧,想吃苹果,拿起来就吃了。这并不是说面向对象的编程...
c语言是面向过程的还是面向对象的?
C语言被设计为一种面向过程的语言。它侧重于程序设计的算法和语言的应用,例如,通过设计各种功能的函数来实现不同的任务。C++则是一种面向对象的语言,它引入了诸如类和对象的概念,允许程序员以更接近现实世界的方式建模和解决问题。C语言以其易于编译和处理低级存储器的特性而闻名。它能够高效地生成机器...