这就是我想要做的:如何在C中模拟Java/C++的面向类的方法?
1)我想要一个实例化数据结构的函数。
void instantiateCDB(void);
2)我也想,可更新被实例化的数据结构,并返回一个const指针的数据结构的函数(使它只读)
我知道,这是可以做到在C++/Java中。但是它也可以在C中完成吗?
,我想写的程序流程是:
main(){
instantiateCDB(); // Allocates a CDB
const struct canDataBlock * cdb = getUpdateSystem();
}
// But the best function definitions that I can come up with is this.
struct canDataBlock * instantiateCDB() {
static struct canDataBlock cdb = {0};
return &cdb;
}
const struct canDataBlock * getUpdateSystem() {
struct canDataBlock * cdb = instantiateCDB();
return &cdb;
}
的问题是:如何访问数据结构的最大读/写访问的instantiateCDB
函数实例是否会被宣布无效?如果我要返回分配的数据结构,用户可以更改canDataBlock
,从而失去其完整性。我想要发生的只是getUpdateSystem()
可以更改由instantiateCDB()
函数实例化的数据结构的值。我该如何解决这个问题? C中有另一种我不知道的技巧。如果有,请教我。 :)
通常你会这样做与函数指针 - http://stackoverflow.com/questions/840501/how-do-function-pointers-in-c-work。你的“类”(结构)将有一个函数指针数组,每个类型指向不同的函数。 – radai
删除'[java]'和'[C++]'作为答案不会有任何关系。使用OO的最好方法是使用C++。 –
你在使用[不透明指针](http://en.wikipedia.org/wiki/Opaque_pointer)吗?如果是的话,我不知道问题出在哪里。如果没有,这是你的[解决方案](http://stackoverflow.com/questions/7553750/what-is-an-opaque-pointer-in-c)。 – anatolyg