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

在面向对象的土地上挣扎?

如何解决《在面向对象的土地上挣扎?》经验,为你挑选了3个好方法。

当我遇到编程问题时,我自然会开始将它们分解为我脑子里的逻辑对象.谁有责任,谁拥有什么,谁来自什么,等等.

我正在与C斗争.我只是不知道如何用程序语言做事.

有经验的C程序员可以帮助解释我在设计时如何考虑我的程序吗?

例如,我想编写自己的Semaphore类.我自然需要一个队列的数据结构,我也想自己编写.如果我需要在Java或C#中执行此操作,我可以简单地编写一个快速的Queue类,并在我的Semaphore类中创建它的新实例.

但在C中,没有对象.那么我是否必须内联我的Queue数据结构的所有行为?

有人可以帮我"搞定"吗?

相关:在c中规划和组织应用程序开发的最佳方法是什么



1> S.Lott..:

但在C中,没有对象.那么我是否必须内联我的Queue数据结构的所有行为?

没有.

做这个.

    定义你的课程,但你觉得做OO设计很舒服.

    将类的属性写为C语言结构.

    将该结构放在头文件中,以及在该结构上运行的所有函数.确保a MyStruct * self是所有这些"方法函数"的第一个参数.

    使用方法函数的所有主体编写C模块.

C中的穷人OO效果很好.只需遵守规则,将所有内容放入您需要的结构中 - 公共和私有实例变量 - 一切.

通常,避免尝试首先使用私有变量.您没有OO编译器的全部功能,因此不要担心"私有"或"受保护"等低价值功能.



2> sk...:

我会修改S. Lott的答案,使用不透明的指针来执行结构成员的数据隐藏:

    根据您的需要使用普通OO设计定义您的类.

    你的类的成员变量进入C语言结构.

    在头文件中,您不希望公开对象的成员变量(因为它们在OO语言中是"私有的").相反,使用不透明指针,即
    typedef struct mystruct_s *mystruct_t; // first argument to all your methods

    对于您想要"公开"的所有方法,请将其签名放在.h文件中.方法体应该进入.c文件,"private"方法应该只在.c文件中定义,并且也声明为静态,因此它们的符号不会与其他文件中定义的符号冲突.

使用此方法不需要像下划线那样的聪明命名约定,但这意味着所有成员变量都是私有的.功能可以是公共或私有的,但公共职能它们所以你可能想用一个"包"名称,如限定他们的名字一个全局命名空间的一部分mystruct_push(),mystruct_pop()等等.

您还需要明确调用者或库是否负责调用malloc()free().你最有可能拥有mystruct_t *create()void destroy(mystruct_t *target)方法.



3> Brian R. Bon..:

你仍然可以用C来思考面向对象.

您只需要创建一个结构和一组函数,这些函数将指向该结构的实例的指针作为其第一个参数.

至于多态性,您可以将结构的大小作为结构的第一个成员传递,因此您知道如何转换它.

这里有一个很好的使用ANSI-C的面向对象编程的pdf.

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