当前位置:  开发笔记 > 编程语言 > 正文

c类函数

如何解决《c类函数》经验,为你挑选了2个好方法。

好吧,这对许多人来说可能是一个愚蠢的问题.让我按照我在过去10年中学到的语言顺序列出这个列表.[顺便说一句,据我所知,其中一些是脚本语言]

vb 6.0

HTML

ASP

PHP

CSS

JavaScript的

托管c ++

C#

C++

C

ASM

是的,我知道我是从完全相反的一端开始的,但希望这份名单让我不会因为这个而受到批评.

问题:是否存在普通C语言的类......我知道有结构......我还想知道你是否可以在C结构/类中声明函数(如果它们存在).我认为两者的答案都是否定的,但是很难在互联网上找到关于普通C的信息,因为大多数事情都是针对C++的.此外,我有兴趣了解与C合作的任何提示,技巧或警告.非常感谢提前.

顺便说一句:我对C的兴趣和速度感兴趣.



1> Edmund..:

C中的类通常通过结合函数指针的结构来模拟.非虚函数可以与指向结构的指针一起传递,如下所示:

int obj_compare_funct(Obj *a, Obj *b);
int result = compare_two_objects(obj1, obj2, obj_compare_func);

但是当你在结构中嵌入指针时,真正的乐趣开始了; 这意味着相同整体"类"的对象可以具有不同的"方法".最大的语法缺点是指向的函数不会自动知道它被调用的对象.因此,对象也需要传递,这使得打字比通常需要的更多.例如:

/***** In the animal.h header file. *****/
typedef struct Animal {
    char *name;
    void (* speak)(Animal *this);   /* The speak "method" */
} Animal;

/* Constructors for various animal types.  Implementation detail: set the animal's speak method to the appropriate one for that animal type. */
extern Animal *make_feline(char *name);
extern Animal *make_rodent(char *name);

/***** Somewhere in zoo.c, which #includes animal.h. *****/
Animal *cat = make_feline("Tom");
Animal *mouse = make_rodent("Jerry");

cat->speak(cat);  /* Print "Tom says meow!" */
mouse->speak(mouse);  /* Print "Jerry says squeak!" */

这个例子比Java等语言提供的继承模型更松散 - 一个Animal实例可以有任何行为,而不是一个特定的行为集,具体取决于它的子类.为了使事情更严格,这些方法通常组合成一个名为vtable(虚函数表)的结构.为每个子类型预先制作一个vtable,并从实例指向适当的vtable.

请注意,这些都不能直接帮助您为每个子类型提供不同的字段 - 这比较复杂(尤其是语法上的),可以通过将对象强制转换为第一个成员来完成,例如:

/* Can be treated as an Animal if you cast its pointer. */
typedef struct Cat { Animal super; int num_fleas; } Cat;

或者使用不透明指针,例如

typedef struct Animal { char *name; void *species_specific_data; } Animal;

额外的字段将隐藏在该void *指针后面,并可通过特定于该物种的方法访问.



2> wallyk..:

C没有课程.这是创建C++除了函数重载,运算符重载和模板之外的一个原因.

当然,类似于类的代码有时会在存在之前写入C++:

typedef struct class1 class1;

struct class1 {
    int (*constructor) (class1 *this);
    int (*destructor) (class1 *this);
    ...
};

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有