既然你说的是多态,那么是的,你可以,在C+出现之前,我们就在做类似的事情。

基本上,您使用的是struct若要同时保存数据和指向该数据的相关函数的函数指针列表,请执行以下操作。

因此,在一个通信类中,您将拥有一个打开、读、写和关闭调用,这些调用将作为结构中的四个函数指针来维护,以及对象的数据,如下所示:typedef struct {

int (*open)(void *self, char *fspec);

int (*close)(void *self);

int (*read)(void *self, void *buff, size_t max_sz, size_t *p_act_sz);

int (*write)(void *self, void *buff, size_t max_sz, size_t *p_act_sz);

// And data goes here.} tCommClass;tCommClass commRs232;commRs232.open = &rs232Open;: :commRs232.write = &rs232Write;

tCommClass commTcp;commTcp.open = &tcpOpen;: :commTcp.write = &tcpWrite;

当然,上面的代码段实际上是在一个“构造函数”中,例如rs232Init().

当您从该类“继承”时,只需将指针更改为指向您自己的函数。调用这些函数的每个人都会通过函数指针来实现这一点,从而给出您的多态性:int stat = (commTcp.open)(commTcp, "bigiron.box.com:5000");

有点像手动表。

您甚至可以通过将指针设置为NULL来拥有虚拟类-这种行为与C+(运行时的核心转储而不是编译时的错误)略有不同。

下面是演示它的一段示例代码。首先是顶级的阶级结构:#include // The top-level class.typedef struct sCommClass {

int (*open)(struct sCommClass *self, char *fspec);} tCommClass;

然后我们有TCP‘子类’的函数:// Function for the TCP 'class'.static int tcpOpen (tCommClass *tcp, char *fspec) {

printf ("Opening TCP: %s\n", fspec);

return 0;}static int tcpInit (tCommClass *tcp) {

tcp->open = &tcpOpen;

return 0;}

HTTP也是如此:// Function for the HTTP 'class'.static int httpOpen (tCommClass *http, char *fspec) {

printf ("Opening HTTP: %s\n", fspec);

return 0;}static int httpInit (tCommClass *http) {

http->open = &httpOpen;

return 0;}

最后是一个测试程序来展示它的作用:// Test program.int main (void) {

int status;

tCommClass commTcp, commHttp;

// Same 'base' class but initialised to different sub-classes.

tcpInit (&commTcp);

httpInit (&commHttp);

// Called in exactly the same manner.

status = (commTcp.open)(&commTcp, "bigiron.box.com:5000");

status = (commHttp.open)(&commHttp, "http://www.microsoft.com");

return 0;}

这将产生输出:Opening TCP: bigiron.box.com:5000Opening HTTP: http://www.microsoft.com

因此,您可以看到不同的函数正在被调用,这取决于子类。

opencomm在c语言中的作用,你能用C语言编写面向对象的代码吗?相关推荐

  1. main在c语言中的作用,main函数在C语言中是怎么定义的?有什么作用?

    main函数在C语言中是怎么定义的?有什么作用? 更新时间:2019-10-24 13:55 最满意答案 额,main不是程序的最开始啦.拿用glibc的程序来说,C语言执行的过程应该是 _start ...

  2. goto在c语言中的作用,关键字goto在C语言中的使用

    1.goto关键字基础知识关键字goto从字面的意思就是"去哪里"的意思,专业一点的话表示无条件跳转的意思(有学过汇编的小伙伴应该会觉得非常像jump指令),在C语言中的使用格式是 ...

  3. 在c语言中调试作用是什么意思,c语言程序调试方法整理

    c语言程序的调试方法 所谓程序调试是指对程序的查错和排错. 调试程序一般应经过以下几个步骤: 一.先进行人工检查,即静态检查. 在写好一个程序以后,不要匆匆忙忙上机,而应对程序进行人工检查.这一步十分 ...

  4. c语言中存贮班级学生的变量,C语言----变量教案.docx

    C语言----变量教案 课 题 2.2 常量和变量----变量 课型 理实一体化 授课班级 高二计算机(升学班) 课时 2 教学目标 复习巩固C语言中常量的应用: 掌握C语言中变量的命名规则及应用. ...

  5. 循环语句在c语言中的作用是什么,C语言中循环语句的使用

    C语言中的循环语句 在C语言中,有三种类型的循环语句: for语句.while语句和do While语句. 分别介绍如下: 1.for循环语句 for语句格式为: for(表达式1;表达式2;表达式3 ...

  6. continue在c语言中什么作用,continue在c语言中什么意思?

    continue在c语言中是退出循环的意思,continue语句的作用是跳过循环体中剩余的语句而强行执行下一次循环. continue语句的作用是跳过循环体中剩余的语句而强行执行下一次循环.conti ...

  7. 在c语言中调试作用是什么,调试技术在C语言程序设计教学中作用探讨.doc

    调试技术在C语言程序设计教学中作用探讨 调试技术在C语言程序设计教学中作用探讨 摘要:C语言程序设计是计算机相关专业的一门重要课程,但是在实际教学中该课程的教学效果并不能令人满意.本文认为学生没有掌握 ...

  8. 循环语句在c语言中的作用是什么,C语言循环命令运用

    1.C语言的应用 随着计算机的普及用,越来越多的人感觉到现有的计算机的应用不能满足越来越多.越来越复杂的事物处理,所以希望自己能够根据所遇到不同的情况来设计.制作.开发相对灵活的控制程序.这样既可以满 ...

  9. %6f 在c语言中的作用,最简单的C程序设计 1.实验目的 ①掌握C语言中使用最多的一种语..._考试资料网...

    最简单的C程序设计 1.实验目的 ①掌握C语言中使用最多的一种语句--赋值语句的使用方法. ②掌握各种类型数据的输入输出的方法,能正确使用各种格式转换符. 2.实验内容和步骤 掌握各种格式转换符的正确 ...

最新文章

  1. 2011寒假-操作系统学习笔记
  2. 跨域理解及服务器端解决跨域问题
  3. 字典数组根据某key排序
  4. UWP 播放媒体控件
  5. 2012_Houdini_ShowReel.
  6. python执行批处理文件_如何从Python中执行批处理文件,从而改变调用进程的环境?...
  7. c 语言中 十六进制数表达,c – 如何解释像0x0A这样的十六进制数?
  8. 如何在使用 Spotify 时更好地保护您的隐私?
  9. Zend_Db_Statement 一行无用代码
  10. UVa140 - Bandwidth
  11. hadoop使用mapreduce统计词频_Hadoop自带WordCount进行词频统计(mapreduce)
  12. 电脑端微信用户图片DAT格式解码为图片
  13. Onedrive服务器位置,移动或更改Windows 10中OneDrive文件夹的位置 | MOS86
  14. APS高级排程在钣金冲压行业的应用
  15. 【多传感器融合定位】【从零开始做自动驾驶定位_任佬】【所学到的东西汇总】
  16. Ubuntu下软件安装
  17. springBoot的过滤器,监听器,拦截器
  18. JVM——引用计数算法与可达性分析算法
  19. html中怎么设置图片平铺,css怎么把图片平铺?
  20. python识别汉字笔画_Python识别图片中的文字

热门文章

  1. oracle 分析函数_数据分析系列笔试题(6)
  2. 使用嵌套循环,打印四行五列星星矩形(每次只能打印一个*)
  3. vue 高阶面试题_大厂面试题合集
  4. python提取高频词_seo与python大数据结合给文本分词并提取高频词
  5. 旅行商问题 c++_动态多目标旅行商问题(一)
  6. Windows 7+Ubuntu 16.04 双系统安装
  7. c oracle日志分析,oracle 日志分析
  8. matlab音频信号的采样与重构,信号与系统实验(MATLAB 西电版)实验21 综合实验2-音频信号的采样与重构.ppt...
  9. python列表索引 end start_Pandas:在Pandas数据帧中查找连续索引的startend值
  10. 无法连接iphone软件更新服务器_NX许可证错误:无法连接至许可证服务器系统。SPLM_LICENSE_SERVER错误[15]...