以下为一个引子:

C中struct的函数实现,只能用函数指针成员。

C结构体内不能有函数的代码,但可以有函数的指针。

C/C code

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

#include <stdio.h>

struct test
{
void fun()
{
printf("hello,world\n");
}
}; int main()
{
struct test _t;
_t.fun();
return 0;
}

上面的代码保存为.c, 在VC 6.0, Dev Cpp 里都通不过。
函数指针方式实现,而不要直接定义函数 ...
当然struct里能放函数指针的。比如这样:

C/C code

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

#include <stdio.h>
void fun()
{
printf("hello,world\n");
} struct test
{
void (*Fun)();
}; int main()
{
struct test _t;
_t.Fun = fun; (*_t.Fun)();
return 0;
}

C结构体内不能有函数的代码,但可以有函数的指针
网友回复:纯C中的struct没有成员函数,但可以有函数指针。
Object-oriented programming with ANSI-C是用函数指针来模拟成员函数的。

参考:http://blog.sina.com.cn/s/blog_502d82e10100fgl1.html

Linux的源代码中C语言对象化

参考Linux内核的源代码中,有更好的使用

#include<stdio.h>

struct MyClass
{
char* name; int age;
void (*funnull) ();
void (*func) (struct MyClass mc);
}; void realfunnull()
{
printf("hello world!\n");
} void realfunc(struct MyClass mc)
{
printf("MyClass's name is:%s\n",mc.name);
printf("MyClass's age is:%d\n",mc.age);
} int main()
{
struct MyClass mc = {"Simon", 25, realfunnull, realfunc};
mc.funnull();
mc.func(mc);
return 0;
}

C语言对象化编程的更多相关文章

  1. 【转载】ANSYS的APDL与C语言混合编程(实例)

    原文地址:http://www.cnblogs.com/lyq105/archive/2010/05/04/1727557.html 本文讨论的不是利用C语言为ANSYS写扩展(或者说是用户子程序), ...

  2. [收藏转贴]struct探索·extern "C"含义探索 ·C++与C的混合编程·C 语言高效编程的几招

    一.C/C++语言 struct深层探索 1.自然对界 struct是一种复合数据类型,其构成元素既可以是基本数据类型(如 int.long.float等)的变量,也可以是一些复合数据类型(如 arr ...

  3. Mysql C语言API编程入门讲解

    原文:Mysql C语言API编程入门讲解 软件开发中我们经常要访问数据库,存取数据,之前已经有网友提出让鸡啄米讲讲数据库编程的知识,本文就详细讲解如何使用Mysql的C语言API进行数据库编程.   ...

  4. 为什么还坚持.NET? 找一门适合自己的语言去做编程

    为什么还坚持.NET? 找一门适合自己的语言去做编程 接触了.NET快十二年了,现在专注于分布式服务的开发. 中间经历过各种编程语言的诱惑,ios等. 前几年才对自己有比较明确的定位 技术上:找到适合 ...

  5. go语言模版编程

    传送门: 柏链项目学院 go语言与模版编程 什么是模版编程 模板是将一个事物的结构规律予以固定化.标准化的成果,它体现的是结构形式的标准化.对于我们程序员来说,更直白的理解是:对于要输出的内容,个人位 ...

  6. Go语言 并发编程

    Go语言 并发编程 作者:Eric 微信:loveoracle11g 1.创建goroutine // 并行 是两个队列同时使用两台咖啡机 // 并发 是两个队列交替使用一台咖啡机 package m ...

  7. C语言socket编程

    建议先去看一下思路 真的写的很不错呦~ 思路参考博客:https://www.cnblogs.com/renfanzi/p/5713054.html linux c语言socket编程代码(单一服务端 ...

  8. 融云开发漫谈:你是否了解Go语言并发编程的第一要义?

    2007年诞生的Go语言,凭借其近C的执行性能和近解析型语言的开发效率,以及近乎完美的编译速度,席卷全球.Go语言相关书籍也如雨后春笋般涌现,前不久,一本名为<Go语言并发之道>的书籍被翻 ...

  9. linux下C语言多线程编程实例

    用一个实例.来学习linux下C语言多线程编程实例. 代码目的:通过创建两个线程来实现对一个数的递加.代码: //包含的头文件 #include <pthread.h> #include ...

随机推荐

  1. DPark安装及相关资料整理

    最近需要处理海量数据的分布式计算及数据挖掘,经过多次选择(hadoop,Spark,DPark),最后还是选择了DPark,主要是看中DPark的轻量级及python的灵活性,且除了豆瓣外,在几个友公 ...

  2. shell基础——二元比较操作符

    二元比较操作符,比较变量或者比较数字.注意数字与字符串的区别. 整数比较 -eq 等于,如:if [ "$a" -eq "$b" ]-ne 不等于,如:if [ ...

  3. Filter与Servlet的区别和联系

    Filter Servlet 接口 实现Filter接口 实现Servlet接口 使用步骤 1.创建类,继承接口 2.实现方法 init() doFilter() destroy() 3.配置WEB- ...

  4. Unity doesn't load, no Launcher, no Dash appears

    1. 重新安装 ubuntu-desktop不起作用. Enter the following commands:- Ctrl+Alt+F1 login there by user name and ...

  5. Object-C自定义对象NSLog输入信息

    http://blog.cnrainbird.com/index.php/2012/07/19/object-c_zi_ding_yi_dui_xiang_nslog_shu_ru_you_yong_ ...

  6. hdu 5567 sequence1(水)

      问题描述 给定长度为n的序列a,求有多少对i,j(i<j),使得∣ai−aj∣ mod b=c 输入描述 若干组数据(大概5组). 每组数据第一行三个整数n(≤n≤),b,c(≤c<b ...

  7. 最简单也最难——怎样获取到Android控件的高度

    问题 怎样获取一个控件的长和高.相信非常多朋友第一眼看见这个问题都会认为非常easy,直接在onCreate里面调用getWidth.getMeasuredWidth不就能够获得了吗,可是.事实上是并 ...

  8. android _scrollview嵌套listview出现高度显示不全解决方案

    只要在工具类里写上这一段代码:/** * scrollview嵌套listview显示不全解决 * @param listView */ public static void setListViewH ...

  9. cropbox插件实现的头像裁剪效果

    html代码 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UT ...

  10. ImageButton与Button

    1.Button控件 Butotn控件,主要用来实现一些命令操作,通过注册监听事件来实现.首先需要在xml文档中放入一个button按钮. <Button android:id="@+ ...