2012-01-13 5 views
3

私は学生プログラマーで、現在Qtを使って私の会社のGUIを設計しています。私はちょうど私ができない単純な質問をWeb上で見つけることができます。誰かが前に尋ねたことがあるように思えるので、もし答えがどこにあるのかわかっていれば、リファレンスに満足しているでしょう。私の質問は、 C++のブール型データ型は、if文を使用して処理できます。だから、bool値は1または0がそうあなたが、私は本当にここを探しています何このIf文を使用したBool値の扱い

bool trueOrFalse() 
{ 
    myclass temp; 
    QString tempstr; 
    double candidate; 
    bool validate; 

    tempstr = ui->tableWidgetInjectionLocations->item(i,9)->text(); 
    candidate = tempstr.toDouble(&validate); 
       if(validate == true) 
       { 
        temp.tempProperty = candidate; 
       } 
       else 
       { 
        QMessageBox error; 
        error.setText("Error"); 
        error.exec(); 
       } 
    if (validate == true) 
     { 
     return true; 
     } 
    else 
     { 
     return false; 
     } 
} 

ような何かを行うことができ、このブール関数の最後のセクションにあるされますか。私がリターンを使用するとき、私は実際にこの関数が保持する値を返すか、またはキーワードの戻り値を不適切に使用していますか?検証が終わったら、別の機能を使用するかどうかを示す機能を使用できるようにしてください。私の批判を建設的にしてください。学生として私は改善にのみ興味があります。

+4

あなたが最後に 'if'文の全体をドロップすると、単に'リターン検証を言うことができます; ' 。それ以外のことは妥当であると思われます - あなたは値で 'bool'を返しているので、関数によって"保持 "されていません – Flexo

+0

このコードでは何が間違っていると思いますか?私はあなたの質問がここに本当に理解することが難しいと思っています。 – mattjgalloway

+1

ようこそStackOverflowへ! – fbrereto

答えて

11

で以前

if (validate == true) 

を交換する関数を呼び出すたびにreturnステートメントを使用して返す値は、文字通り返されます。

、あなたのプログラムの中でどこかにこのコードを記述するのであれば:

bool returnValue = trueOrFalse(); 

その後、returnValue変数はtrueOrFalse()関数によって返されたものは何でもするブール値相当が含まれています。

関数自体は値を「保持」しません。関数の呼び出し側は、関数呼び出しの完了後に値を保持する変数を定義します。あなたの2番目の質問については


、あなたは正しくreturn文を使用してですが、あなたは、実質的にtrueOrFalse()機能でコードを簡素化することができます。 validateローカル変数がすでにboolあるので

return validate; 

:この代わりに:

if (validate == true) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 

必要なのはこれです!

ブール値(true)に対してブール値をチェックする冗長性がなくなり、奇妙なエラーが発生しなくなり、コードを読みやすく理解しやすくなります。

実際には、ブール値(bool)を使用しているときはいつでも、この一般的なパターンを使用できます。むしろリテラルfalseまたはtrueに対してそれらを比較するよりも、あなただけ書くことができます。

if (validate) // test for truth 
{ 
    // do whatever... 
} 

または

if (!validate) // test for falsity 
{ 
    // do whatever... 
} 
+0

場合の理由は、私はフォーマット を持っている(検証== true)を {真 リターン; }?他 { を戻り値false; } if(validate1 == true && validate2 == true && validate3 == true && ... if valid validate boolがtrueを返す場合は、 vectoに追加するrを作成して、親関数にtrueの値を渡してください。その場合、私はこれを正しく設定していますか? –

+1

はい、正しいです。しかし、Blastfurnace氏によると、単純な構文( 'if(validate1 && validate2 && validate3)')を使えます。それがうまく動作するのは、 '&&'演算子のためです。これは、すべてのケースが真であることを保証します。 –

+0

ifステートメントは、データが真であることを知っていることをどのように知っていますか?プリフィックスa!を付けない限り、bool値はすべて真ですからですか?また、trueOrFlase関数がtrueかfalseかどうかを宣言するif文が必要です。これにより、別の関数で処理を続行するかどうかを決定するために使用できます。 –

7

それをテストし、別のブール値を返すように理由はありません

return validate; 

if (validate == true) 
     { 
     return true; 
     } 
    else 
     { 
     return false; 
     } 

を交換してください。

あなたはそれに取り組んでいる一方で、

if (validate)