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

先頭へ戻る

問題①

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

#include <iostream>

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


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

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

問題②

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

#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


参考リンク



更新履歴

'2018/7/10 全体的に見直し修正。

'2017/7/4 問題②の解答で、列挙定数の末尾のコンマの可否についての記述が逆になっていたのを修正。
特にコードの書き換えは必要無いので、これに関する記述自体を削除した。

'2013/2/23 新規作成。



第2章のメインページへ

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

Programming Place Plus のトップページへ


このエントリーをはてなブックマークに追加
rss1.0 取得ボタン RSS