c/c++语言开发共享结构接口

定义新struct ,最好还定义该类型的接口
(即“setter”和“getter”function)或直接通过访问成员.->运营商?

编辑
普通C编程

    这取决于您的结构是否是抽象数据类型。 如果你在头文件中公开结构定义,那么定义访问器没有任何意义–API客户端仍然可以直接读/写字段,而在C中,他们确实有合理的期望它可以工作。

    另一方面,您可能希望完全隐藏结构,并仅向客户端显示其声明,作为一种不透明的句柄:

    foo.h中:

     typedef struct foo foo; foo* foo_create(); void foo_free(foo*); int foo_get_bar(foo*); void foo_set_bar(foo*, int); 

    Foo.cpp中:

     struct foo { int bar; }; foo* foo_create() { return malloc(sizeof(foo)); } void foo_free(foo* p) { free(p); } int foo_get_bar(foo* p) { return p->bar; } void foo_set_bar(foo* p, int newval) { p->bar = nwval; } 

    client.cpp:

     #include "foo.h" foo* f = foo_create(); f->bar = 123; // compile error, bar is not defined foo_set_bar(f, 123); // ok 

    这样做的原因是1)封装,与OO相同,以及2)版本控制 – 您可以向结构中添加新字段,或者自由地重新组织它们,旧代码将保持二进制兼容。

    使用C,您通常不会为每个结构成员定义setter和getter。

    C ++中存在setter和getter的优点,因为您可以通过private和protected进行数据隐藏。 使用C,没有私有和受保护的struct成员的概念。

    如果您正在阅读其他人的代码,您是否愿意看到:

     setSomeValue(&aStruct, VALUE); 

    要么:

     aStruct.someValue = VALUE; 

    第二个语法很明显,正在设置aStruct的字段。 首先,您依赖于程序员选择的函数和变量名来获取该信息。

    在C中,如果要创建新结构,则它已经内置了setter / getter。如果使用变量名,则使用varName.memberElement,如果使用结构指针:pointer – > memberElement。 例如:

     struct Random { int temp; }; 

    如果我们创建一个struct变量, struct Random example那么我们可以使用它来访问和设置变量。 符号。

     example.temp = 12345; 

    如果我们创建一个struct指针,我们将使用 – >表示法。

     struct Random element, *pointer; pointer = &element; 

    我们将指针设置为指向元素,然后访问成员,

     pointer->temp = 12345; 

    无需在C中创建单独的setter / getter接口和函数。不要为自己做更多工作。

    这取决于程序的大小和预期用途。 请记住,默认情况下,结构的所有成员都是公共的。 如果您需要将它们设为私有,请改用“class”。

    跟随Brian Bondy的回答,在C中你不能拥有吸气剂和制定者; 成员函数不是语言的一部分。

    在C ++中,通常不使用它们,因为根据惯例,结构几乎总是包含普通旧数据,并且只是直接访问成员。

      以上就是c/c++开发分享结构接口相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(计算机技术网)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ctvol.com/c-cdevelopment/562427.html

      (0)
      上一篇 2021年2月4日
      下一篇 2021年2月4日

      精彩推荐