2011-11-27 8 views
0

C 프로그램에서 C++의 get 스타일 함수를 재현하려고합니다. C++에는 클래스에 값을 할당하고 값을 설정하는 두 가지 함수가있을 수 있습니다. `C에 상응하는 방법이 있습니까?어떻게 C++ 클래스 스타일을 C에서 함수를 재현 할 수 있습니까?

int y = access_int(damaru); 
:

int access_int(help damaru) { 
    return damaru->a; 
} 

이렇게 I의 구조로부터의 정수 값을 할당 할 수있다 : I의 구조의 값에 액세스하기 위해 다음과 같은 기능을 갖는다

typedef struct test_help 
{ 
    int  a; 
    void** numArrays; 
    struct test_help *next; 
} help_node, *help; 

: 나 구조는 다음 말하게

그러나 나는 아래와 같은 구조의 멤버에게 값을 할당하려고합니다 :

help damaru; 
int z=10; 
damaru->int = z; 

->의 사용을 없애고 싶습니다. assign 함수와 비슷한 함수를 작성하고 싶습니다. 왼쪽에있는 액세스 기능을 사용하면 경고가 표시됨을 알려드립니다.

+2

"The C++"... 재미 있습니다. : P –

+0

@PaulManta 특히 기사가없는 "C '에서 보완 할 때 : – GSerg

+2

포인터를 typedefing하여 가리게하지 마십시오. 포인터가 무엇인지 알지 못하는 경우가 있습니다. – sth

답변

4

당신은 구문 오류가 왜 오타가,이 작업을 수행하는 올바른 방법은

damaru->a = z; 

이 같은 액세스 기능 뭔가 그런

void setA(help inHelp,int inA) 
{ 
    inHelp->a = inA; 
} 

작업을 사용하는 것이 확인하는 것입니다

setA(damaru,z); 

C가 객체 지향적이 아니므로 이 객체 지향 기능의 직접 매핑이 없음을 기억하십시오. ->없이

+0

나는 OP가 그것을 이해한다고 믿고 있으며 그것은 단지 코드의 오타 일 뿐이므로'damaru-> a; '를 올바르게 수행한다. –

+0

하지만 내 질문에, 만약 내가 ** ** ** 대신 쓸 수있는 몇 가지 기능이 있습니다. – thetna

+0

'->'는 C에서 당신이하는 방식입니다. – Hogan

0
사용 damaru->a = 42;

, 또는 :

1

(*damaru).a = 42;는이 같은 세터 기능을 정의 할 수 있습니다.

5

C를 C++처럼 작동하도록 만들지 말고 완전히 다른 방식으로 사용되는 두 가지 언어입니다. 간단한 할당 이상을 수행해야하는 경우가 아니라면 변수를 직접 수정하면됩니다. 어쨌든, 네, 당신이 그것을하는 방법을 보여주었습니다 :

typedef struct { 
    int val; 
} MyType; 

void MyType_SetVal(MyType *mt, int i) { 
    mt->val = /* some complex expression involving `i` */; 
} 
+1

나는 동의하지 않습니다. 캡슐화는 C++에서와 마찬가지로 C와 유사하므로 인수 및 거부는 두 언어에서 모두 동일합니다. 보다 복잡한 예제에서는 setter와 getter는 단순히 단일 멤버 변수를 설정하는 것보다 더 정교한 작업을 수행 할 수 있습니다. –

+0

@Oli 답변을 다시 읽으십시오. –

+0

물론, "C를 C++로 왜곡 시키려고하지 마라."내가 여기에 동의하지 않는 것입니다 ... –

관련 문제