2011-11-27 13 views
0

私はC言語でC言語のgetスタイル関数を再現したいと思っています。 C++には、クラスに2つの関数があり、値の割り当てと値の設定ができます。 `Cで何か同等の方法がありますか?CでC++クラススタイルのget関数をどのように再現できますか?

int y = access_int(damaru); 

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

はので、私は構造体から整数の値を割り当てることができます。私は、構造体の値にアクセスするために、次のような機能を持っている

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

ポインタを型定義することによってポインタを隠すことはなく、ポインタとは何かを見るのが非常に難しくなります。 – sth

答えて

4

あなたは構文エラーを取得する理由は、これを行うための正しい方法はこのようなものを使用すると

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

を働くだろうアクセス機能を作るために

damaru->a = z; 

ですタイプミスを持っています

setA(damaru,z); 

Cはオブジェクト指向ではないので、このオブジェクト指向機能のダイレクトマッピングはありません。

+0

私はOPがそれを理解していると信じています、そしてそれはコードのための誤植です。正しく 'damaru-> a;'です。 –

+0

しかし私の質問は、それらの代わりに書くことができるいくつかの機能がある場合** ** **です。 – thetna

+0

' - >'はCのやり方です。 – Hogan

0

使用damaru->a = 42;、または、->なし:(*damaru).a = 42;

1

あなたはこのようsetter関数を定義することができます。

5

CをC++のように動作させようとしないでください。2つの言語は完全に異なって使用されます。単純な代入以外の処理を実行する必要がある場合を除き、変数を直接変更してください。とにかく、はい、それを行う方法を示したもの:

typedef struct { 
    int val; 
} MyType; 

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

私は同意しません。カプセル化は、C++と同様にC言語と同様に機能するので、両方の言語でsetterとgetterの引数が同じであるため、反対の引数があります。より複雑な例では、setterとgetterは単純に単一のメンバ変数を設定するよりも洗練された処理を行うことができます。 –

+0

@Oli答えをもう一度読んでください。 –

+0

確かに、「CをC++に変えようとしないでください」と私がここで反対しているのは... –

関連する問題