Как этот объект может ссылаться на себя - PullRequest
2 голосов
/ 10 июня 2011

Я возился с некоторым кодом, пытаясь понять ООП с помощью c.Мне очень нравится этот стиль и я хочу его использовать.Пример кода прекрасно работает, если другой класс создает экземпляр 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 ]

6 голосов
/ 10 июня 2011

Ну, любая функция, работающая с экземпляром вашего "класса", должна будет взять указатель на экземпляр. Это происходит автоматически и неявно в C ++, но в C вам придется передавать указатель «this» везде.

Это означает, что ваш setFooNumber имеет правильную подпись для "функции-члена", тогда как setmyself - нет.

0 голосов
/ 10 июня 2011

Существует причина, по которой C ++ и другие языки OO имеют неявный параметр для методов экземпляра. Единственный способ сделать это, если вы явно передаете указатель this. Функция не имеет доступа к чему-то, что не объявлено в соответствующей области: локально или глобально (параметры являются локальными).

Чтобы понять ООП в C, вам нужно понять, как моделировать чистый OO-код процедурным способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...