易截截图软件、单文件、免安装、纯绿色、仅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;


相关文档:

Linux下的C编程实战之文件系统编程

1.Linux文件系统
  Linux

持多种文件系统,如ext、ext2、minix、iso9660、msdos、fat、vfat、nfs等。在这些具体文件系统的上层,Linux提供
了虚拟文件系统(VFS)来统一它们的行为,虚拟文件系统为不同的文件系统与内核的通信提供了一致的接口。下图给出了Linux中文件系统的关系:
  在Linux平台下对文件编程可 ......

典型的C程序存储空间布局

一个典型的C程序存储空间布局由以下几个部分组成:
    正文段:CPU执行的指令部分,也就是主要的程序代码编译出来的结果,只读,通常可以共享。
    初始化数据段:通常称之为数据段,包含了程序中需要明确赋值的变量,譬如一些初始化的全局变量等,如 int a = 10,变量名和值都存放在这 ......

realview MDK C/C++ 混合编程问题(续一)

    前几天写了关于Keil与C/C++混合编程的若干问题,今天写的是继续前面的。
   
    在使用C/C++混合编程的时候,程序运行到类里面的虚拟函数时死掉,查看其vptr值为0x00000000,这时候不知道怎么解决,后来自己编了一个实例程序可以通过,发现vptr的值是在__main里面的& ......

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号