该对象如何引用自身

时间:2011-06-10 12:37:03

标签: c

为了使用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 
}

2 个答案:

答案 0 :(得分:6)

好吧,在“类”实例上运行的任何函数都必须指向实例。这在C ++中自动和隐式地发生,但在C中你必须在任何地方传递一个“this”指针。

这意味着您的setFooNumber具有“成员函数”的正确签名,而setmyself则没有。

答案 1 :(得分:0)

有一个原因,C ++和其他OO语言对实例方法有一个隐含参数。唯一可行的方法是显式传递this指针。函数无权访问未在适当范围内声明的内容:本地或全局(参数为本地)。

要理解C中的OOP,您需要了解如何以程序方式模拟纯OO代码。