C语言中面相对象的编程

面向对象的重要思想就是数据隐藏,在面向对象语言中,对象可以包含私有变量。这样我们可以说他们具有内部状态,这些内部状态对其他对象是透明的。全局变量可以通过设置变量作用域来模拟私有变量(甚至友元对象)。

首先是C语言中公共变量的对等实现

这些全局变量会导致意大利面条式的代码。为了避免这些问题,可以在函数外部用static关键字定义一个私有变量,并且定义在文件的头部。

static 关键字在不同的地方用处不一样。

一组松散的变量有点难以追踪,所以可以考虑将一个模块内部的私有变量封装到结构体中:

struct sLogStruct* LogInit(){

tBoolean logOn;

static enum eLogLevel outputLevel[NUM_LOG_SUBSYSTENS];

}sLogStruct;

Static struct sLogStruct gLogData;

如果想让代码看起来像个对象,那么这个结构体就不应该是这个模块的一部分,而英国在初始化的时候创建(分配内存malloc),然后将其返回给调用函数。

struct sLogStruct *LogInit(){

int I;

struct sLogStruct *logData = malloc(sizeof(*logData));

logData->logOn = FALSE;

for(I = 0; I

{

logData->outputLevel = eNoLogging;

}

return logData;

}

这样就可以想对象一样传递这个结构体了。malloc了的变量记得要释放,在接口中会增加一个函数去释放就可以了。

声明:

本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

C语言中面向对象编程相关推荐

  1. C++学习笔记:(七)C语言实现面向对象编程

    面试官:C和C++有什么不同? 应聘者:一个是面向过程,一个是面向对象. 这样的答案在我看是不完全正确,因为面向过程编程和面向对象编程是编程思想,C++可以用面向过程的思想编程,同样,C语言也可以用面 ...

  2. C 语言实现面向对象编程

    C 语言实现面向对象编程 1.引言 面向对象编程(OOP)并不是一种特定的语言或者工具,它只是一种设计方法.设计思想.它表现出来的三个最基本的特性就是封装.继承与多态.很多面向对象的编程语言已经包含这 ...

  3. 在C语言中以编程的方式获取函数名

    在C语言中以编程的方式获取函数名 仅仅为了获取函数名,就在函数体中嵌入硬编码的字符串,这种方法单调乏味还易导致错误,不如看一下怎样使用新的C99特性,在程序运行时获取函数名吧. 对象反射库.调试工具及 ...

  4. C语言中面向对象的尝试

    C语言中面向对象的尝试 作者:周志明 说明:程序中关于画直线和园的算法,请参阅图形学相关知识.算法部分写在在main函数后. 运行环境:TC2.0(运行时候注意路径问题) #include<gr ...

  5. 一步步分析-C语言如何面向对象编程

    这是道哥的第009篇原创 一.前言 在嵌入式开发中,C/C++语言是使用最普及的,在C++11版本之前,它们的语法是比较相似的,只不过C++提供了面向对象的编程方式. 虽然C++语言是从C语言发展而来 ...

  6. C#中面向对象编程中的函数式编程

    目录 介绍 面向对象编程中仿真的函数式编程技术 粒度不匹配 面向对象的函数式编程构造 相互关系函数式编程/面向对象程序设计 C#中的函数式编程集成 函数级别的代码抽象 操作组合 函数部分应用和局部套用 ...

  7. ctor c语言,一步步分析-C语言如何面向对象编程

    这是道哥的第009篇原创 一.前言 在嵌入式开发中,C/C++语言是使用最普及的,在C++11版本之前,它们的语法是比较相似的,只不过C++提供了面向对象的编程方式. 虽然C++语言是从C语言发展而来 ...

  8. c语言实现面向对象编程

    文章目录 概述 框架介绍 基类 c++基类 c 实现基类 派生类 c++派生类 C实现派生类 基于模型的多重继承 C++的多重继承 c的多重继承 对象创建和使用 C++ 应用 C应用 概述   有一种 ...

  9. 老汤回味——C语言与面向对象编程

    今天的文章我们来看看如何结合面向对象的思想使用C语言写出结构良好的代码.直接看代码,然后我们来分析一下代码中的含义.首先是头文件user.h: #ifndef USER_H #define USER_ ...

最新文章

  1. apache 网站跳转至同一页面(可用于当网站在备案时显示告示)
  2. IT团队应如何保障分支机构的网络安全—Veclou微云
  3. 森林病虫防治系统 (十一)
  4. Maven web项目创建
  5. highchart 柱状图,列宽自适应(x轴是时间的特殊情况)
  6. getresource 路径转义_java中的相对路径和绝对路径
  7. python 无头模式 绕过检测_网络爬虫之使用pyppeteer替代selenium完美绕过webdriver检测...
  8. cv方向有哪些_计算机视觉(CV)与交通的千丝万缕
  9. Git push - fatal: write error: Bad file descriptor
  10. 原画插画零基础自学|原画基础入门教程
  11. android viewholder静态,Android listview viewholder
  12. 【U3D方向专职猎头】 大厂、高薪职位资源多 非U3D资深勿扰 工作地点北京、深圳、上海、杭州、广州、成都、加微信17512088053
  13. Photoshop CC2017软件安装教程
  14. Cacti 无法启用气象图和气象图中图标添加
  15. AutoRunner4.5结合真实项目crm客户管理系统进行界面功能自动化测试教学资料(登录)
  16. 性能评测方法、各评测项标准总结
  17. 【IAP支付之三】苹果IAP安全支付与防范 receipt收据验证
  18. 在微软从测试开发工程师到主管
  19. DEDECMS安装使用教程
  20. 一名3年工作经验的Java程序员应该具备的技能

热门文章

  1. J2CL –迟到总比不到好
  2. 带注释的控制器– Spring Web / Webflux和测试
  3. JDeps入门–分析项目的依赖关系
  4. hibernate 继承_Hibernate继承:每个类层次结构的表
  5. java堆 数据结构 堆_Java中的紧凑堆外结构/组合
  6. jsf集成spring_Spring和JSF集成:异常处理
  7. 什么是activemq_什么是ActiveMQ?
  8. Lambdas中的例外:有点混乱的优雅解决方案
  9. 在Java中避免空检查
  10. 编写干净的测试–从配置开始