问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

为什么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语言以其易于编译和处理低级存储器的特性而闻名。它能够高效地生成机器...

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
求迈克尔·杰克逊(Michael·Jackson)20首最经典、最好听的歌曲 michael jackson的全部歌曲都哪些?大神们帮帮忙 michael jackson的全部歌曲 工作很累,下班回家后做的第一件事是什么,说说看? 你下班之后第一件事干嘛? 麦克风里的电池充了一天电停一天电跑了点再充充停一天不试用敢不敢... ...特别费电,可充电电池充满使用半小时就没电了,怎么会事?无线接收器设... ...被减数,减速差三个数家起来等于1000,其中减速是96.被减数和差... 在一个减法算式里,被减数,减数与差这三个数的和是388,减数比差大16求... 在减法算式中,差和减数相加得520.被减数是多少? 申论把演讲提纲写成演讲稿咋办 宝马水鸟gs官网报价查询 有和宝马GS张的像的摩托车吗 宝马GS750的TRIP是什么意思 问题为:摩托车里面最经典的拉力车是什么型号(提示,这家公司是蓝天白云标,以水平对置双缸著称)? 宝马水鸟1250gs是双缸还是四缸? 宝马g310gs2021款跟2020款区别 配备R18同款发动机 宝马“超级水鸟”R1800GS效果图出炉 宝马摩托为什么叫水鸟 稠对相反相成? 小米手环怎么接通知 小米3手环怎么接 小米手环怎么接和qq的信息 工程建设云CA锁申请中总是提示授权委托书不清晰什么原因? 代办造价员ca锁授权委托书怎么写 excel升级后 找不到运筹学里规划求解功能了 谁可以告诉我是哪个选项呀 原本的位置是数据-工具- 规划求解 国产鱼竿有哪些品牌 (ˊo&#820;&#822;&#823;&#804;&#8964;o&#820;&#822;&#823;&#804;ˋ)什么牌子的钓鱼竿性价比高? 对大学生激励寄语 激励大学生正能量的一段话 华为买了三天不想要了能退吗 实体店华为手机,买了的第二天,用了感觉不喜欢,可以退货退款吗? 佳能mp288连供加了墨水红色管和蓝色管有气在管子里有什么好办法弄好吗?急 佳能MP288打印机连供管内有空气,并且打印几乎没有颜色怎么办? 四川省工伤死亡赔偿标准一览表2020 不上学了在家可以学什么? 宝妈在家想学一门技术,学什么,有推荐吗? 一个人在家带孩子,空闲时间多,学点什么技术提升自己? 红旗进入开挂模式,全新MPV效果图曝光,能干掉丰田埃尔法吗? 两台3750互联,光模块一插上先亮一下黄灯就灭了,奇怪的是我测光功率一开始有,插好这组光纤后就没了 核心交换机光模块端口为什么有两个灯,其中每个灯的代表什么?图中为什么这个端口就亮了一个灯? 两个光模块一边亮一边不亮灯 为什么交换机2头光模块灯亮了就是不可以用 有数字和英文的美剧名 中兴交换机的汇聚层指示灯亮,接入层指示灯不亮,调试尾纤接口和光模块后又好了,过几天网又断了,怎么办 求美剧【加州靡情】的基本演员表,比如Karen, Mia, Runcle的演员的英文名字~~~ 人加一笔是什么字?(除了大,及,亼,亽,亾,乆,夨)请写出拼音,谢谢! “人”加一笔变成一个什么字?有20追加分的 一般什么地方可以做完整的语音识别,把一句微信上不完整有杂音的语音聊天翻译出来,麻烦各位朋友帮帮我急 手机,哪个软件可以用语音输入翻译
  • 焦点

最新推荐

猜你喜欢

热门推荐