我一直在考虑使用c来应用OO实践。基本上我到目前为止得到的大纲是
每个对象都有自己的文件 公共函数和变量在.h文件中为对象定义 私有变量和函数位于.c文件中。
//HEADER
typedef struct channelobj * ChannelOBJ;
ChannelOBJ newChannelOBJ();
void setVolume(ChannelOBJ,float);
void setMute(ChannelOBJ,int);
void setNumberOfInputs(ChannelOBJ,int);
//SOURCE
struct channelobj {
//int privateint;
//char *privateString;
float volume=1;
int mute=0;
int numberOfInputs=0;
short int *leftoutput;
short int *rightoutput;
};
ChannelOBJ newChannelOBJ(){
ChannelOBJ channel=(ChannelOBJ)malloc(sizeof(struct channelobj));
bzero(channel, sizeof(struct channelobj));
return channel;
}
到目前为止,我非常喜欢这种方法。在我的示例代码中,我展示了在头文件中定义名为channelobj的结构。我不确定在头文件中类似地定义联合的正确语法。
我在源文件中的联合看起来像这样。
typedef union {
struct {
SInt16 high;
SInt16 low;
} parts;
UInt32 word;
} IntConverter;
我如何在头文件中定义它?
答案 0 :(得分:4)
您可以像struct
一样处理它,为其命名并使用typedef
的指针:
typedef union intconverter *IntConverter;
ChannelOBJ
和IntConverter
之类的传统术语是不透明句柄。不透明的句柄并不完全是面向对象的(因为你没有继承,虚函数等),但它们是将接口与实现分离的好方法(即提供封装)。