2011-12-06 21 views
1

は、私はC++クラスでは、このようなコードを書く人を見ました:C++で問題を引き起こす次のコードはありますか?

int foo (int dummy) 
{ 
    this->dummy = dummy; 
} 

は、我々はそれが問題を引き起こすだろう、そのようなコードを使用しなければなりませんか?

こういうものをコンパイルしようとしましたが、うまくいくようです。

@Update: 私は主に名前dummyについての投稿、および内部変数this->dummy、それはあなたがreturnの文が欠落している以外のメンバ関数のための完全に罰金です問題

+2

に割り当てられていますか? –

+0

これはなぜ問題を引き起こすのでしょうか?これは普通のセッターです。しかし、IMHO、私は物を返さないので、私はこのメソッドを 'void'メソッドとして作成します。 – 0xd

+0

@WagnerVaz、私の '@ update'を見て、私は他のものについてもっと気にしました – daisy

答えて

5

を引き起こし、だ場合。 dummyはメンバー変数をシャドーするので、this->を使用してメンバーを参照します。

int foo (int dummy) 
{ 
    this->dummy = dummy; // set member to argument 
    return this->dummy; 
} 

単純な集合関数よりも複雑な場合は、混同しないようにしないでください。

int foo (int dummy) // Bad practise! Rename this param as the function isn't a setter 
{ 
    this->dummy = dummy * 2 + 1; 
    return this->dummy; 
} 
1

このperseを実行することは何も問題ありません。クラスから来ていると仮定してダミーを使うのであれば、混乱するかもしれませんが、実際にはパラメータから来ています。

IMOは、それがクラスメンバーであることを示すために何かを使用する方が優れています。単にmDummy、他のm_Dummyを使う人もあれば、ダミーを書く人もいます。

あなたが好きなものはどれだけど、何よりも一貫していなければなりません。

0

コードは正しくありません。この関数は、intを返すと定義されていますが、returnステートメントはありません。コンパイラはこれについて警告するだけかもしれませんが、fooを呼び出す関数は有効な値を返すと期待しているかもしれません。

0

メンバ変数と同じ名前のパラメータを渡す場合は、この方法で行う必要があります。 しかし、別の名前を使用して隠れた(メンバー)変数を避ける方が良いかもしれません。異なるコーディングスタイルがあり、あるものはdummy_を使うものもあれば、mDummyや他の方法でメンバー変数の名前を付けるものもあります。これはコードの混乱を少なくします。

-1
  1. これが機能します。
  2. しないでください、混乱します!まあ
0

がご使用と間違って何もありませんが、コードがint型の関数としてint型を返す必要があります:)あなたの現在のクラスで

ダミー変数が渡されたintに割り当てられている、しかし、覚えていますか彼らは異なっていますが、現在は同じものを指しています。したがって、別のものと異なる名前を付ける方が良いです。

ただし、特定の変数タイプで精度が低下する可能性があります。

#include <stddef.h> 

typedef struct intlist { 
    int size; 
    int i[1]; 
} intlist; 

intlist * 
makeintlist (int size) 
{ 
    intlist *ilp = malloc (offsetof (intlist, i[size])); /* not C++ */ 
    ilp->size = size; 
    return ilp; 
} 

メンバ変数のサイズは、なぜそれがOKではないでしょうサイズ

関連する問題