01_C++入門(C言語との違い)

はじめに

C言語を学んだ皆さんにとって、C++は「C言語の進化版」です。基本的な文法は共通していますが、C++ではより安全で読みやすいコードを書くための機能が追加されています。この章では、C言語との主な違いをコードで確認しましょう。

入出力の書き方の違い

C言語では printfscanf を使っていましたが、C++では coutcin を使います。

C言語スタイル(参考)

#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}

C++スタイル

#include <iostream>
using namespace std;

int main() {
    cout << "Hello, World!" << endl;
    return 0;
}
ポイント:

入力の書き方の違い

C言語の scanf に相当するのが C++ の cin です。

C言語スタイル(参考)

#include <stdio.h>

int main() {
    int num;
    printf("数字を入力してください:");
    scanf("%d", &num);
    printf("入力値:%d\n", num);
    return 0;
}

C++スタイル

#include <iostream>
using namespace std;

int main() {
    int num;
    cout << "数字を入力してください:";
    cin >> num;
    cout << "入力値:" << num << endl;
    return 0;
}
ポイント:

C言語との主な違い一覧

機能 C言語 C++
出力 printf("Hello\n") cout << "Hello" << endl
入力 scanf("%d", &n) cin >> n
文字列型 char str[100] string str
真偽値 int(0か1) bool(true/false)
コメント /* ... */ /* ... */// どちらも使える

bool型(真偽値)の追加

C言語では 0 と 1(または 0 以外)で真偽を表していましたが、C++ では bool 型が正式に用意されています。

#include <iostream>
using namespace std;

int main() {
    bool isStudent = true;

    if (isStudent) {
        cout << "学生です。" << endl;
    } else {
        cout << "学生ではありません。" << endl;
    }
    return 0;
}
string型の使い方:
C++では文字列を string 型で扱えます。#include <string> を追加すると使えます(using namespace std; があれば std::string と書かなくてよい)。

Visual Studio でのファイル管理ルール

この授業では、演習ごとに新しい .cpp ファイルを作成します。 ただし、C++(C言語も同様)では 1つのプロジェクトに main() が2つ以上あるとビルドエラーになります。 次の手順でファイルを管理してください。

⚠ 忘れると起きるエラー:
古いファイルをビルド対象のままにした状態で新しいファイルを追加すると、
error LNK2005: main はすでに~で定義されています
のようなリンクエラーが出ます。

次の演習ファイルに移るときの手順

  1. 現在のファイル(例:hello.cpp)でビルド・実行して確認する
  2. ソリューションエクスプローラーで hello.cpp右クリック
  3. プロパティ」を開く
  4. 「構成プロパティ」→「全般」→「ビルドから除外」を はい に変更
  5. 「OK」で閉じる
  6. 新しいファイル(例:types.cpp)を追加してコーディング開始
ポイント:「ビルドから除外」に設定したファイルは削除されません。後から見返すことができます。 ファイル名に演習番号を付けて管理しましょう(例:01_01_hello.cpp01_02_hello_mod.cpp)。

コーディング演習

演習1:基本コードを動かす

01_01_hello.cpp を作成し、次のコードを入力して実行しましょう。
// hello.cpp
#include <iostream>
#include <string>
using namespace std;

int main() {
    string name;
    cout << "名前を入力してください:";
    cin >> name;
    cout << "こんにちは、" << name << " さん!" << endl;
    return 0;
}

演習2:コードを改造する

01_01_hello.cpp をコピーして 01_02_hello_mod.cpp として保存し、次の変更を加えてみましょう:
ヒントを見る int age; で年齢を宣言し、cin >> age; で入力を受け取ります。
bool isAdult = (age >= 18); のように比較結果を直接 bool 変数に代入できます。

理解度チェック

問題01-1

次のC++コードを実行したとき、出力される結果として正しいものはどれか。

#include <iostream>
using namespace std;
int main() {
    int x = 5;
    cout << "x = " << x << endl;
    return 0;
}
解説を表示 正解:イ
cout << "x = " << x << endl; は「x = 」という文字列のあとに変数 x の値(5)を繋いで出力します。結果は x = 5 となります。

問題01-2

C言語の scanf("%d", &num); に対応するC++の書き方として正しいものはどれか。

解説を表示 正解:ウ
C++では cin >> 変数名 でキーボードから入力を受け取ります。書式指定子やアドレス演算子(&)は不要です。

問題01-3

C++で bool 型の変数 flag = true を宣言したとき、cout << flag << endl; の出力は何か。

解説を表示 正解:イ
デフォルトでは bool 型は 1(true)または 0(false)として出力されます。boolalpha マニピュレータを使うと "true" / "false" の文字列で表示できます。

問題01-4

次のうち、C++で 文字列 を扱うために使う型として正しいものはどれか。

解説を表示 正解:ア
C++では string 型で文字列を扱います。使うには #include <string> が必要です。C言語の char[] と異なり、長さを気にせず扱えます。

まとめ