class TestClass { public: int badMember; void test(int x) {...} }; int main() { TestClass testClass; testClass.test(3); }
... struct TestStruct { int badMember; void (*test)(TestStruct*, int); }; void TestStruct_test(TestStruct*, int x) {}... int main() { TestStruct testStruct; testStruct.test = &TestStruct_test; testStruct.test(&testStruct, 3); // or TestStruct_test(&testStruct, 3); }
encapsulation은 대강 다음과 같이 할 수 있습니다.
/* in header */ struct PrivateInterface; struct PublicInterface { PrivateInterface* privateDataOrFunction; int publicData; } /* in code */ struct PrivateInteface { .... }
http://ldeniau.home.cern.ch/ldeniau/html/oopc/oopc.html
http://www.planetpdf.com/codecuts/pdfs/ooc.pdf
http://www.planetpdf.com/codecuts/pdfs/ooc.pdf
C++ 소스
class Person { int age; public: void setAge(const int age); int getAGe() const; };
이걸 C로 구현하면 아래와 같습니다.
#include <stdio.h> struct Person { int age; void (*setAge)(struct Person * this, const int age); int (*getAge)(const struct Person * this); }; void Person_setAge(struct Person * this, const int age) { this->age = age; } int Person_getAge(const struct Person * this) { return this->age; } void Person_init(struct Person * this) { this->setAge = Person_setAge; this->getAge = Person_getAge; } void Person_destroy(struct Person * this) { } int main() { struct Person minsu; /* 생성자 호출 */ Person_init(&minsu); minsu.setAge(&minsu, 10); printf("%d\n", minsu.getAge(&minsu)); /* 소멸자 호출 */ Person_destroy(&minsu); return 0; }