易截截图软件、单文件、免安装、纯绿色、仅160KB

c 指针实现面向对象

指针是C的灵魂,正是指针使得C存在了这么多年,而且将长期存在下去。事实上,我自己不用C语言写程序已经有一年了,工作中接触到的只有java,python和javascript.最近用C完成了一下类似于OO中的封装(即"类")的概念,顺便把指针复习了下,感觉有必要记一下。
    本文中的例子有这样两个概念:任务(Task),执行器(Executor)。任务有名称(taskName),并且可以执行(execute)。 而执行器与具体任务所执行的内容无关,只是回调(callback)任务的执行方法,这样我们的执行器就可以做的比较通用。而任务接口只需要实现一个execute方法即可,这样我们的任务就可以是多种多样的,可以通过统一的接口set给执行器执行。这是面向对象中基本的思想,也是比较常用的抽象方式。下面我们具体看下例子。
    可以想象,main函数大概是这个样子:
 int main(int argc, char** argv) {
    Task *t1 = TaskConstruction("Task1", run);//此处的run是一个函数指针
    Executor *exe = ExecutorConstruction();
    exe->setTask(t1);
    exe->begin();
    exe->cancel();
    Task *t2 = TaskConstruction("Task2", run2);//此处的run2也是一个函数指针,用于构造一个Task.
    exe->setTask(t2);
    exe->begin();
    exe->cancel();
    
    return (EXIT_SUCCESS);
}
    运行结果为:
 task : [Task1] is ready to run
[a = 1.200000, b = 2.300000]
[(a + b) * (a - b) = -3.850000]
cancel is invoked here
task : [Task2] is ready to run
another type of execute,just print out some information
cancel is invoked here
好了,下面详细看看实现:
    定义接口
    首先,定义Task和Executor两个实体的接口:
    Task接口,注意其中的_this字段,这个指针在后边有很重要的作用,用于hold整个Task的实例。然后是一个taskName的字符串,和一个函数指针,这个指针在初始化(构造)Task时传入。这个execute()函数比较有意思,它不在内部使用,而是让执行器回调执行的。
 #ifndef _ITASK_H
#define    _ITASK_H
typedef struct Task{
    struct Task *_this;


相关文档:

关于perl中和C中的sort机制 (转载)

关于perl中和C中的sort机制
(转载)
细读C++ primer,终于理解了一直比较疑惑的perl和C的sort函数机制。我到不是疑惑它的用法,而是很疑惑它的形式,为什么要传递一个子程序的匿名引用给它呢,而且形式还很古怪,一定要是$a<$b,$a<=>$b之类的。要求严格且古怪。
今夜突然看到p.384页,看到书上对quicksort排 ......

第一章 C指针概念

声明:本文转载自互联网
一、指针的类型
二、指针所指向的类型
三、指针的值或指针所指向的内在区
四、指针本身所占据的内在区
1.指针的类型:
从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就
是这个指针的类型。这是指针本身所具有的类型。让我们看看以下各个指针的
类型:
(1)int *ptr ......

C复杂声明解析

C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明规则,是用来解决如何创建声明的,而右左法则是用来解决如何辩识一个声明的,两者可以说是相反的。右左法则 ......

c文件操作函数

c文件操作函数

clearerr(清除文件流的错误旗标)  
相关函数  feof
表头文件  #include 
定义函数  void clearerr(FILE * stream); 
函数说明  clearerr()清除参数stream指定的文件流所使用的错误旗标。 
返回值  
fclose(关闭文件)  ......

c 动态添加控件

C#动态创建菜单
 
一、加入所需数据
1、创建数据表:
 
create table t_SysMenu(
FMenuName  varchar(50)    not null ,
FMenuText  varchar(50)    not null ,
FMenuEvent  varchar(100)  ,
FMenuShortcutKeys varchar(50) n ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号