C++言語講座 初級編 第2回
オブジェクト
オブジェクトの宣言
前回のC++講座では、coutとendlというオブジェクトを紹介しました。それぞれ、画面と改行を表したことはおぼえてますね? 今回は、自分で新たなオブジェクトを作る方法を解説します。まず、以下の例を実行してください。
[List 1]
1 #include <iostream>
2 using namespace std;
3
4 int main()
5 {
6 int x;
7 x = 10;
8
9 cout << x << endl;
10
11 return 0;
12 }
プログラムを順番に見ていきましょう。
1 int x;
前回の講座でintは整数を表す型だと言いました。このように
型の名前 オブジェクトの名前 ;
と書くことで、新たにオブジェクトを作ることが出来ます。ここでは x という名前のint型のオブジェクトを作っています。「int型」とはどういう意味でしょう。オブジェクトを、何かを入れることの出来る箱のようなものだと考えてください。「int型」とは、中に整数を入れることの出来るオブジェクト(箱)という事です。
このように新しくオブジェクトを作ることを、オブジェクトの宣言と呼びます。最後の;を忘れないように。
1 x = 10;
ここで、x というオブジェクト(箱)の中に、実際に整数を入れています。これを代入と呼びます。ここから先、xというオブジェクトは整数の10を表していると考えて下さい。ちなみに = を代入演算子と呼びます。
1 cout << x << endl;
ここでは、xの内容を画面に表示しています。
演算子
上では = を「代入演算子」と呼びました。このように、オブジェクトの間に書き、そのオブジェクトに対して何かの処理をするものを演算子(operator)と呼びます。
int型であるxは演算子を使って色々な計算が出来ます。 [List 1]の
1 x = 10;
を色々と変えてみましょう。例えば、
1 x = 1 + 2 - 3 + 4 - 5;
とか。
+ と - はそれぞれ足し算と引き算を表す演算子ですが、掛算と割り算はどうすれば良いでしょう。キーボードには×や÷といったキーは有りません。仕方が無いので代わりに * (アスタリスク)と / (スラッシュ)を使います。
1 x = 1 + 9 / 3 * 2 - 4;
とか。
この場合、数学と同じように割り算と掛算が先に計算されます。この順番を変えたい場合、やはり数学と同じように ( ) で囲めば良いのです。
1 x = 100 / (3 - (2 - 4) );
とか。
+ - * / をまとめて、四則演算子などと呼びます。
下の行に目を移しましょう。
1 cout << x << endl;
ここに出てくる << も演算子の一種だという事には気づいたでしょうか? << も演算子なのですから、x の所を以下のようにすることも出来ます。
1 cout << x + 10 << endl;
(x に10を足した値を表示している) 色々遊んでみましょう。
初期化
オブジェクトを宣言するところで、
1 int x;
と書きました。その後で x に10を代入しましたが、オブジェクトを宣言するのと同時に、値を代入することも出来ます。
1 int x = 10;
これを通常の代入と区別して、オブジェクトの初期化(initialization)と呼び、「xの初期値は10だ」等と言います。
組み込み型
前回の講座で、C++のコンパイラは頭が悪いと言いました。しかし、いくら何でも基本的な型だけは、コンパイラも知っています。このように、コンパイラが最初から知っている型を組み込み型と呼びます。組み込み型には以下のような種類が有ります。
(よく使われるもの)
int |
符合付き整数(Windowsではlongと同じ) |
double |
小数(64ビット) |
(あまり使われないもの)
long |
整数(32ビット) |
short |
整数(16ビット) |
char |
整数(8ビット)又は半角文字一文字 |
float |
小数(32ビット) |
他にもいろいろな種類があります。マニュアルを調べてみましょう。
ユーザ定義型
わざわざ「組み込み型」という分け方をしているという事は、組み込み型でない型も有るという事です。上の表を見て、文字列を表す型が無いことに気づきましたか?
文字列を表す型が欲しい場合は、C++標準ライブラリから読み込まなければならないのです。ファイルstringを#include文で読み込みます。文字列を表す型の名前は std::string です。最初にusing namespace std;と書いている場合は std::を省略できます。
[List 3]
1 #include <iostream>
2 #include <string>
3 using namespace std;
4
5 int main()
6 {
7 string x = "Hello";
8
9 cout << x << endl;
10
11 return 0;
12 }
画面に
Hello
と表示されたでしょうか?
このように、組み込み型でない型のことをユーザ定義型と呼びます。その名の通り、自分で作ることが出来ますが、詳しくはC++講座第三章で説明します。
オブジェクトの名前
今まで出てきたオブジェクトには全て x という名前を付けていました。しかし、x と書いただけでは、そのオブジェクトがどんな意味を持つのか分かりにくいですよね。std::cout や std::endl のように、その働きが分かるような名前をつけた方が良いでしょう。では、オブジェクトに付ける名前は、どんなものが許されて、どんなものがいけないのでしょうか。
オブジェクトの名前は、std::cout などの例を見れば分かるように、一文字とは限りません、よほど長くないかきり、好きな名前をつけることが出来ます。使える文字は英語の大文字、小文字、_ (下線)、数字 です。ただし、 _ (下線)や数字で始まる名前を付けてはいけません。
◯良い例
x、object、str1、the_object、theObject等
×悪い例
123xyz (数字で始まっている)、_xyz (下線で始まっている) 等
文字列の入力
C++標準ライブラリのオブジェクトをもう1つ紹介しましょう。std::cin です。cout が画面、すなわち出力だったので、cin は入力、すなわちキーボードを意味します。キーボードからの入力を受け取るには、 cout と反対に >> 演算子を使います。以下に、キーボードから入力された文字列をそのまま表示するプログラムの例を示します。
[List 4]
1 #include <iostream>
2 #include <string>
3 using namespace std;
4
5 int main()
6 {
7 string buf; // 文字列型のオブジェクトbufを宣言
8
9 cout << "何か入力して下さい:";
10
11 cin >> buf; // キーボードからbufに読み込み
12
13 // 表示
14 cout << "あなたが入力した文字列は:"
15 << buf << endl;
16
17 return 0;
18 }
注意:入力するときにスペースを入れないで下さい。cinはスペースごとに区切って読み込もうとして、全てを表示できなくなるので。
代入
オブジェクトへの代入について、もう少し詳しく見てみましょう。[List 5]を見て下さい。
[List 5]
1 #include <iostream>
2 using namespace std;
3
4 int main()
5 {
6 int x = 0;
7 int y;
8
9 y = x;
10
11 x = 10;
12
13 cout << x << endl << y << endl;
14 return 0;
15 }
ここでは、二つのオブジェクト x と y (両方ともint型) を扱っています。
1 int x = 0;
とのことですので、x の初期値は0です。y の初期値は有りません。次に
1 y = x;
で、y に x を代入しています。これで、x も y も0が代入されている状態ですね。そして、
1 x = 10;
で、x に10を代入しています。最後に、x と y の値を表示しています。さて、画面に何と表示されるか、分かりましたか?
正解は
10 0
です。つまり、最後に画面に表示する時点で、x の中身は10で、 y の中身は0だという事です。何が言いたいかと言うと、
1 y = x;
というように、イコールで結ばれていますが、これは、(数学のように)「xとyが等しい」という意味ではないのです。C++において、=は代入という意味で、右辺の内容を左辺に放り込むという機能しか持っていません。
複数のオブジェクトの同時宣言
C++では、複数のオブジェクトを同時に宣言することが出来ます。[List 5]と同じ内容のプログラムを、この方法を使って書き変えてみます。
[List 6]
1 #include <iostream>
2 using namespace std;
3
4 int main()
5 {
6 int x = 0, y;
7
8 y = x;
9
10 x = 10;
11
12 cout << x << endl << y << endl;
13 return 0;
14 }
わかりましたね?
1 int x = 0;
2 int y;
となっていたのが、
1 int x = 0, y;
に変わっています。このように、, (カンマ)を挟んで、複数のオブジェクトを同時に宣言することが出来るのです。
