C言語との差異 解答ページ | Programming Place Plus Modern C++編【言語解説】 第2章

トップページModern C++編 C++編](../../index.html) – 第2章

Modern C++編は作りかけで、更新が停止しています。代わりに、C++14 をベースにして、その他の方針についても見直しを行った、新C++編を作成しています。
Modern C++編は削除される予定です。

問題①

問題① 次のプログラムは、文字と整数のどちらを出力しますか?

#include <iostream>

int main()
{
    std::cout << 'A' << std::endl;
}


このプログラムは、文字の A を出力します。

A

C++ では、‘A’ は char型として扱われます。 std::cout を使って出力を行う場合、渡した値の型を判断して適切な形式を選んでくれます。 char型を渡せば、素直に文字が出力されます。


問題②

問題② 次のプログラムを、C言語でも C++ でもコンパイルでき、同じ実行結果になるように書き換えてください。

#include <iostream>

enum Color {
    RED,
    GREEN,
    BLUE
};

int main()
{
    Color color = 0;

    color += 1;

    std::cout << color << std::endl;
}


まず、C言語では <iostream> はありませんから、<stdio.h> に置き換えます。

#include <stdio.h>

そして、std::cout での出力を、printf関数に変更します。

    printf("%d\n", color);

C言語では、仮引数を省略することと void と明示することの意味合いが異なりますから、 main関数の引数には、明示的な void を追加します。

int main(void)

C言語では、列挙型の変数を宣言する際、「enum」キーワードを省略できませんから、明示的に書くようにします。

また、初期値として int型の 0 を渡すことは、C++ ではキャストを必要としますからキャストも追加します。このキャストの際に指定する型もまた、enumキーワードを明示的に書かないといけません。

    enum Color color = (enum Color)0;

C++ では、enum型変数に int型を加算できません。 +=演算子を使っているとキャストもできないので、分解した上でキャストを追加します。

    color = (enum Color)(color + 1);

これで完了です。 全体像を再掲します。

#include <stdio.h>

enum Color {
    RED,
    GREEN,
    BLUE
};

int main(void)
{
    enum Color color = (enum Color)0;

    color = (enum Color)(color + 1);

    printf("%d\n", (int)color);
}

実行結果:

1



参考リンク


更新履歴

’2017/7/4 新規作成。



第2章のメインページへ

Modern C++編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る