在C ++中,我们有抽象和数据隐藏。我们能通过C实现这个目标吗?
答案 0 :(得分:6)
在.C文件中定义你的结构,并且只在你的标题中“转发声明”结构。
所以你的.C文件可以包含这个:
struct Car
{
char *brand;
int maxspeed;
};
你的.H文件可能包含:
typedef struct Car *CarHandle;
然后编写函数来操作Car(setter,getters,...)并将它们放在与定义struct相同的.C文件中。 当然,函数原型应放在标题中。
现在调用者可以使用CarHandle和CarHandle上运行的函数,但是从不会看到Car结构中的内容。
答案 1 :(得分:2)
您可以使用不完整的派生类型,类似于C ++中的“opaque data”概念。 This is a pretty well written article on the subject.
答案 2 :(得分:0)
你可以使用静态(全局)变量和外部函数来操作它们。
答案 3 :(得分:0)
正如Peter Miehle所提到的,你可以创建一个模块专用的变量和函数(通常与文件相同,我想这取决于编译器)。
您可以将模块与类进行比较。
static
个变量只能在模块中访问。您还可以通过在模块中将函数声明为static
来使用等效的私有函数。
这个和真正的类之间的区别在于你只能有一个实例。但是只需要很少的工作,你也可以模仿几个实例的实现。
答案 4 :(得分:0)
High and Low-Level C文章包含很多好的提示。特别是,请查看“抽象数据类型”部分。