为了使用c来理解OOP,我一直在修改一些代码。 我真的很喜欢这种风格,想要使用它。如果另一个类创建了一个FooOBJ实例,那么代码示例效果很好。
FooOBJ如何引用自己来改变自己的变量? 我是否需要在构造函数中创建foo的副本或类似的东西,或者我是否正在偏离正确的方法来使用此方法?
struct fooobj {
int privateint;
char *privateString;
};
FooOBJ newFooOBJ(){
FooOBJ foo=(FooOBJ)malloc(sizeof(struct fooobj));
bzero(foo, sizeof(struct fooobj));
return foo;
}
void setFooNumber(FooOBJ foo,int num){
if(foo==NULL) return; /* you may chose to debugprint something
*instead
*/
foo->privateint=num;
}
void setmyself(int val)
{
//this->privateint = val
}
答案 0 :(得分:6)
好吧,在“类”实例上运行的任何函数都必须指向实例。这在C ++中自动和隐式地发生,但在C中你必须在任何地方传递一个“this”指针。
这意味着您的setFooNumber
具有“成员函数”的正确签名,而setmyself
则没有。
答案 1 :(得分:0)
有一个原因,C ++和其他OO语言对实例方法有一个隐含参数。唯一可行的方法是显式传递this指针。函数无权访问未在适当范围内声明的内容:本地或全局(参数为本地)。
要理解C中的OOP,您需要了解如何以程序方式模拟纯OO代码。