H-4 第4章の相違点

if

Delphi の if 文における then は、C++ では書きません。また、既述の通り、begin, end{, } になり、if 文の条件判断でよく使われる等号 === になります。

【基礎課題 4-1】は、Delphi では

procedure TForm1.ButtonShindanClick(Sender: TObject);
begin
  if SpinEdit.Value >= 6
    then
      begin
        CheckBoxHigh.Checked := True;
        EditMessage.Text := '少しストレスがたまっています。気分転換を。';
      end
    else
      begin
        CheckBoxLow.Checked := True;
        EditMessage.Text := 'ストレスの兆候がありますが、心配は不要。';
      end
  ;
end;

となりますが、C++Builder では

void __fastcall TForm1::ButtonShindanClick(TObject *Sender)
{
  if (SpinEdit->Value >= 6) {
    CheckBoxHigh->Checked = true;
    EditMessage->Text = "少しストレスがたまっています。気分転換を。";
  } else {
    CheckBoxLow->Checked = true;
    EditMessage->Text = "ストレスの兆候がありますが、心配は不要。";
  }
}

となります (C++ では if 文の字下げは一般に1段だけの字下げです)。もちろん else 以下を省略することも出来ます。省略すると次のようになります。

void __fastcall TForm1::ButtonShindanClick(TObject *Sender)
{
  if (SpinEdit->Value >= 6) {
    CheckBoxHigh->Checked = true;
    EditMessage->Text = "少しストレスがたまっています。気分転換を。";
  }
}

等号・不等号

※ 等号・不等号の書き方はこの表の通りです。
数学表記 意味 Delphi での表記 C++ での表記
A>B A は B より大きい A > B A > B
A≧B A は B 以上 A >= B A >= B
A=B A は B に等しい A = B A == B
A≦B A は B 以下 A <= B A <= B
A<B A は B より小さい A < B A < B
A≠B A は B に等しくない A <> B A != B

switch

【基礎課題 4-6】は、Delphi では

procedure TForm1.ButtonShindanClick(Sender: TObject);
begin
  case SpinEdit.Value of
    9..10 :
      begin
        // 変数の範囲が 9〜10 のときの処理
      end;
    6..8 :
      begin
        // 変数の範囲が 6〜8 のときの処理
      end;
    3..5 :
      begin
        // 変数の範囲が 3〜5 のときの処理
      end;
    0..2 :
      begin
        // 変数の範囲が 0〜2 のときの処理
      end;
  end;
end;

という形をしていますが、C++Builder では

void __fastcall TForm1::ButtonShindanClick(TObject *Sender)
{
  switch (SpinEdit->Value) {
    case 9:
    case 10:
      // 変数の範囲が 9〜10 のときの処理
      break;
    case 6:
    case 7:
    case 8:
      // 変数の範囲が 6〜8 のときの処理
      break;
    case 3:
    case 4:
    case 5:
      // 変数の範囲が 3〜5 のときの処理
      break;
    case 0:
    case 1:
    case 2:
      // 変数の範囲が 0〜2 のときの処理
      break;
  }
}

となります。これを見比べて分かるように、

  1. Delphi における case 文は、C++ では switch 文です。
  2. C++ では、各分岐に case とつけます。また、9..10 という範囲指定はできません。
  3. C++ では、各分岐処理の最後に break 文をつけます。break 文がない場合、次の分岐処理に入ってしまいます。例えば、「変数の範囲が 9〜10 のときの処理」の最後に break 文がないと、次に位置する「変数の範囲が 6〜8 のときの処理」までやってしまいます。

また、Delphi の case 文における else は、C++ の switch 文では default となります。

for

Delphi による【基礎課題 4-19】

procedure TForm1.ButtonCalcClick(Sender: TObject);
var
  i: Integer;
begin
  for i := 1 to SpinEditTimes.Value do
    begin
      SpinEditResult.Value := SpinEditResult.Value + i * 2;
    end;
end;

C++Builder による【基礎課題 4-19】

void __fastcall TForm1::ButtonCalcClick(TObject *Sender)
{
  int i;
  for (i = 1; i <= SpinEditTimes->Value; i = i + 1) {
    SpinEditResult->Value = SpinEditResult->Value + i * 2;
  }
}

C++ では、for 文は for (<初期化部>; <条件部>; <増分部>) という形をしています。for 文に来ると、まず初期化部 (この例では i = 1) を実行し、条件部 (この例では i <= SpinEditTimes->Value) を満たしている間は繰り返し処理をします。なお、1回分の繰り返し処理の最後には増分部 (この例では i = i + 1) を実行します。

C++ の演算子の別表記により、上のプログラムは次のようにも書けます。

void __fastcall TForm1::ButtonCalcClick(TObject *Sender)
{
  int i;
  for (i = 1; i <= SpinEditTimes->Value; i++) {
    SpinEditResult->Value += i * 2;
  }
}

補足 ++ は C 言語では非常によく使われます。ちなみに、C++言語という名称は、従来のC言語にオブジェクト指向の要素を付加したもの、つまり一歩進んだC言語という意味でつけられたようです。

また、i を1ずつではなく2ずつ増やしたり、for の中で変数 i を用意したり出来ます。

void __fastcall TForm1::ButtonCalcClick(TObject *Sender)
{
  for (int i = 2; i <= SpinEditTimes->Value * 2; i += 2) {
    SpinEditResult->Value += i;
  }
}

while

Delphi による 4-10 の【練習問題】

procedure TForm1.ButtonCalcClick(Sender: TObject);
begin
  while SpinEditBact.Value < 10000 do
    begin
      SpinEditMinute.Value := SpinEditMinute.Value + 1;
      SpinEditBact.Value := SpinEditBact.Value * 2;
    end;
end;

C++Builder による 4-10 の【練習問題】

void __fastcall TForm1::ButtonCalcClick(TObject *Sender)
{
  while (SpinEditBact->Value < 10000) {
    SpinEditMinute->Value = SpinEditMinute->Value + 1;
    SpinEditBact->Value = SpinEditBact->Value * 2;
  }
}

while 文は、C++ でも殆ど同じです。なお、C++ の演算子の別表記により、上のプログラムは次のようにも書けます。

void __fastcall TForm1::ButtonCalcClick(TObject *Sender)
{
  while (SpinEditBact->Value < 10000) {
    SpinEditMinute->Value++;
    SpinEditBact->Value *= 2;
  }
}

C++ では、どんな while 文でも for 文として書くことが出来ます。

void __fastcall TForm1::ButtonCalcClick(TObject *Sender)
{
  for ( ; SpinEditBact->Value < 10000; ) {
    SpinEditMinute->Value++;
    SpinEditBact->Value *= 2;
  }
}

更に、SpinEditMinute->Value++for 文の増分部に移すことも出来ます。

void __fastcall TForm1::ButtonCalcClick(TObject *Sender)
{
  for ( ; SpinEditBact->Value < 10000; SpinEditMinute->Value++) {
    SpinEditBact->Value *= 2;
  }
}