现在的位置: 首页 > 综合 > 正文

C语言对象化编程

2013年06月15日 ⁄ 综合 ⁄ 共 1098字 ⁄ 字号 评论关闭

以下为一个引子:

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;
}

抱歉!评论已关闭.