E D R , A S I H C RSS

Object Programming InC

Object Programming In C


sample code

~cpp
#include <stdio.h>
struct testClass 
{  
    int attrib; 
    void (*method1)(int);   
};
  
void Operator1(int x) {
	printf("%d\n", x);
}

int main()  
{  
    testClass instanceClass;  
    instanceClass.method1= &Operator1; 
    instanceClass.method1(3);  // or Operator1(3);  
	return 0;
} 

thread

결국 포인터.

--
typedef struct
{
int attrib;
void (*method1)(int);
}testClass; --영호
----
여기서 Question. 만일 attrib 를 찍고 싶다면? --1002
----
결국 private가 없단 소린데... 컴파일 까지만 해서 lib 형태로 header에 public화 할 것만 공개한다면... 불가능이군...
차라리 저 구조체만 다른 lib에 저장시키고 링크를 불가능하게 내부에서만 연산을 한다면 몰라도. return value는 kernel이나 IPC로 넘겨 줘야할 듯.
이렇게 된다면 class에서 private를 쓰는 목적을 달성은 하지만 효용성은 거의 제로겠고...
attrib을 찍는다는 문제를 주셨는데... attrib가 private라 가정하고, 따라서 method1의 함수가 구조체(클래스)의 attrib을 고친다는 뜻으로 판단하고 생각해본다면... C++의 this란 예약어가 없다면 C언어에서 C++과 같은 class의 표현은 어려울 듯. 메모리주소로 가능을 할 수도 있으나, 코드 조작을 어셈블리 차원으로 내려가 하나하나 손봐야함... (이 답이 아니라면 낭패)
--영호
함수인자로 명시적으로 포인터를 넘겨주던지 해야겠네 ㅡ.ㅡ;; 결국 뻘짓이구만 ㅋㅋㅋ - eternalbleu

별 다른 뜻은 아니고, C++ 컴파일러의 경우 메소드인 경우 인자로서 this 를 자동으로 넘겨준다고 해서. 그리고, attrib 이 private 이 아닌 public 이라 하더라도, 똑같은 질문이 가능할듯. --1002
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:53
Processing time 0.0200 sec