Visual C++ プログラミング 第48号
発行日:1/8
♪♪♪♪♪------------------------------------------------------------------
Visual C++ プログラミング
[第48号]2005年 01月08日
------------------------------------------------------------------♪♪♪♪♪
このメールマガジンは、
興味だけでVisual C++を買ってみたが、何も作れず結局諦めてそこら辺に放ってある、
入門書を買ったけど入門できず門前払いされてしまった、など、
そういった人のための、0から気軽にはじめられるお手軽講座です。
受講するには、Visual C++を持っていること(Visual C++.net 2003以上が理想)
あとは何も必要ありません。
さあ、あなたもVisual C++を使って立派なプログラムを作ってみましょう!
※注意※
このマガジンに記載されている内容の正確さについては保証できません。
間違ったことが記載されている可能性もあり、それのせいで何らかの
被害(こまったこと?)を被った場合も、筆者は一切の責任を負いません。
読む前に、あらかじめご了承ください。また、その道のプロや、
技術者を最終的な目標としているわけでもないので、応用的なものを求めている方は、
ご遠慮ください。(本当に基本的なことしか書いてありません。)
♪♪♪♪♪------------------------------------------------------------------
[こんなときは]
[1] 分からなくなった場合は
言っていることが全く分からない、あなたは本当に日本語を書いているのか、
疑問点、あってほしくありませんが間違いがある、そんな場合は、以下のフォームを
そのままコピー・ペーストし、必要事項を記入の上、このマガジンの送信元に
そのまま返してください。質問内容は、最新号でなければならないわけではありません。
第1号から、随時受け付けています。
(このフォームに沿ってないかたちで、メールを送信すると、場合によっては、
返信をしません!)
[質問フォーム]※は必須です
・あなたのハンドルネーム [ ]
※質問したい号・項目[]
※質問内容
[ ]
・意見や要望など
[ ]
[2] このマガジンを読むために推奨する環境
表示フォントは、等幅フォント(MS ゴシックなど)にしてみると見やすくなります。
サイズは、10ptが最も適切です。(Microsoft Outlookの場合。)
(今までMS Pゴシックと書いてありましたが、間違いでした。
申し訳ないです・・・。)
------------------------------------------------------------------♪♪♪♪♪
[お知らせ欄・訂正など]
[非常に重要] バックナンバー配信不可
バックナンバーをHTML化していましたが、コンピューターを新調した際、
誤って消してはいけないディスクもフォーマットしてしまったため、
バックナンバーの原文とともにすべて消滅してしまいました。
大変申し訳ありませんが、完全なバックナンバーを配信することは、
事実上不可能になりました。近々、これまでの成り行き(1号からしてきたこと)を、
簡潔にまとめた番外編を、近々数号に分けて出すつもりですので、
そのときので確認をお願いします。
♪♪♪♪♪------------------------------------------------------------------
[48] 補足と確認 その1
いよいよWindowsプログラミングを始めていこうと思います。が、
C/C++言語の基礎がしっかりしていなければ、すぐ挫折を経験することでしょう。
とくに、関数・ポインタ・構造体・文字列の知識がしっかりしていないと、
非常に困ります。(実際に私はあいまいにしていて、挫折したことがあります。)
そこで今回は、Windowsプログラミングを始める前に、もう一度確認しておきたい事項を
挙げていこうと思います。過去にメールで送られてきた質問も題材にして、
いくつか掲載します。
(これは、今までの内容の確認です。1から・・という方は、今後何号かに分けて、
基本編を配信しますので、お待ちください・・。)
[1] 文法
[D] ★★☆☆☆☆☆☆☆☆☆☆
もう文法についてはこちらから何も言うことはありませんが、
基本的な文法については、はじめ何回かで紹介しました。
そこで抜けていたちょっとした事項、たとえば、「こういう書き方はどうなの?」とか、
そういった内容について少々補足をしておきます。
まず、一つの処理の終わりにつけるものといえば、「;」(セミコロン)でしたね。
私のコードの書き方は我流であって、そう書くのが理想というわけではありません。
私の書き方だと、必ず、どんな短い処理であろうと、一つの処理ごとに改行していたと
思います。たとえば、
int a, b, c;
a = 1;
b = 2;
c = 3;
のように。ですが、これをひとまとめに、一行で書くことができます。
(初期化をするという意味ではない)
実は、こういう簡単な演算の場合は、上のようにいちいち三行に分けなくても、
a = 1, b = 2, c = 3;
のように、 , (カンマ)で区切って一度に行うことができます。
そして、処理も、 , でつなげば、いくつでも一行で書くことができます。
int a, b, c;
a = 2, b = 3, c = 5, cout << a << b << c;
「こんなのありかな?」と思うかもしれませんが、こういう書き方も可能です。
ただし、これには注意することがあります。 , でつながれた部分から、処理の終わりの;
まで、はじめの処理から優先して行われるわけですが、上のコードを、
int a, b, c, a = 2, b = 3, c = 5, cout << a << b << c;
このようにすることはできません。intとか、charとかのように、前置詞のようなものが
ある場合は、, の意味が変わってしまいます。(この場合は複数の変数の定義)
そうすると当然ですがa = 2は初期化しているのだと思われますし、それ以前に、
再定義してしまっていますね。最後のcoutに至っては変数ですらありません。
なので、確かに , でつなげば楽なのですが、何でも,でつないで短縮しようと考えては
いけません。上の二行を一行で表現したい場合は、
int a, b, c; a = 2, b = 3, c = 5, cout << a << b << c;
このようにしてください。私のコードでは、 ; があると改行しますが、
改行しなくてもそのままよこにずらずらーと並べても特に問題はありません。
スペース・タブ(Tabキーを押すとできる大きな空白みたいなもの)は、
たとえばコードを20行あけたとしても、タブを50個挿入して書いたとしても、
引数と引数の間にスペースを200個挿入しようとも、問題はないです。
逆になくても問題がないところもあります。たとえば、#include文などは、
#include <iostream>
こう書いていると思いますが、
#include<iostream>
こう書いても問題はないし、
#include <iostream>
これも問題はありません。ようは、スペースなどの空白は、飾りです。
一行にまとめて書こうが、いちいち改行しようが、それはユーザーの自由なのです。
[2] 文字型
[D] ★★★★★☆☆☆☆☆☆☆
文字列も非常に勘違いや間違いを犯しやすい要素の一つです。
おまけにこれを使う機会は、残念ながらこれからもっと増加します。
そこで、改めて文字列を見直してみましょう。
まず、文字列の基本となるのが、文字型です。文字列は、char型の配列でしたね。
char型変数の単体では、0〜255の整数を入れることのできる変数となります。
ここまでは紹介したと思いますが、あまりにもchar型そのものの紹介が簡単すぎました。
ここでは、char型の基本について補足をします。
char型の変数には、整数だけでなく、文字も入れることができ、
一文字のみの挿入ならば、 '' で囲んで代入を行います。
char c = 'a';
これで、「a」という文字の文字コードが整数値でcに入ります。実は、文字型変数という
ものに入っている値は文字/文字列ではなくて、ただの整数です。ただ、char型の場合は、
「この数値ならこういう文字に置き換えて表示しよう!」とコンピューターが勝手に
判断して、char型変数の中に入っている数値を文字として表示しているだけです。
それで、このchar型変数に入っている整数値を文字として表示するための書式が、
printf関数の「%c」だったのです。(coutではこれは当然必要ない。)
ここでは、printf関数を使っていることで話を進めていきます。
(Windowsプログラミングではcoutのようなものはなく、
printf関数と似通ったwsprintf関数などを多用するため。)
しかし、「あ」や、「abc」など、一文字以上、すなわち一バイト以上の文字・文字列を
格納するには、char型だけでは不可能です。なぜなら、2バイト文字・文字列の
組み合わせの値は、255を超過してしまって、単純にオーバーフローを起こしてしまう
からです。そこで、C/C++言語には、文字列を格納するための要素として、
文字型配列を用意しています。
char a[50];
のようにすれば、 '文字' を50個、すなわち50バイト格納できる文字型配列を
宣言できますね。ただし、文字列の場合は注意が必要で、どこが終端なのかはっきり
しておく必要があります。その終端をはっきりしておくところ、つまり文字列の終端を
示す文字が、ヌル文字 ( '\0' )です。ヌル文字で終わる文字列を、
ヌル終端文字列(Null-terminated String)などといいますが、文字列はヌル文字で
終了すると言うことはほぼ常識なので、単に文字列というのが一般的です。
そして、文字列に対して初期化は有効ですが、代入を行うことはできません。
初期化の際は、
char a[50] = "test";
のように、 '' ではなく、 ""で囲んだもので初期化します。
たとえば、上の"test"は、
char a[50] = { 't', 'e', 's', 't', '\0' };
を行ったものと同じです。"" で初期化した場合は、文字列の終端に、
自動的にヌル文字がつきます。これも1バイトと数えられるため、
上の場合aが利用しているバイト数は、4ではなくて5です。
[ 重要 ]
・文字型は、入っている数値を文字として置き換え表示しているようなものである。
・文字列を格納するためには、文字型の配列を利用する。
・ "" で初期化(+格納)を行った場合、末尾に自動的にヌル文字が付加される。
・文字型配列に対しては文字列で初期化することは可能だが、代入はできない。
[3] 変数
[D] ★★★★★★★☆☆☆☆☆
文字列操作を行う前に、変数の基本から見直していきます。まず、変数とは、
「値を格納しておくための箱」のようなものだと言いました。箱は、私たちの世界にも、
オモチャ箱、重箱、筆箱、お弁当箱など、それぞれ入れる対象も、容積も違うように、
(しかし、無理矢理詰め込んだりすれば、他の箱に入らないこともないというのがミソ)
C/C++言語の変数にも、種類があり、それぞれ入れる対象、大きさが異なります。
この変数の種類のことを、データ型と呼びます。
[ 重要 ]
・変数とは、値を一時的に保存しておくための道具である。
・変数には、種類がいくつかあり、それらの種類をデータ型と呼ぶ。
基本的に変数に入れる対象は、数値、文字(文字列)、アドレスです。
(アドレスは大きく解釈して数値の仲間にしていいかもしれませんが・・)
文字についてはさっきのところで少ししたので、ここでは、数値を対象にして、
話を進めていきます。まず、変数は、何もないのに使うことはできません。
変数は、「ここで、こういう種類の、こういう名前の変数を使います。」という、
宣言をしなければ使うことはできません。(変数の宣言。)
変数名は、半角英数字、_ (アンダースコア)などから構成されなければなりません。
たとえば、
a
test
hensuu
variable
test123
hensuu_a
XXX_111_a
このような名前の変数は作成ができますが、
test@test (使えない記号 @ が入っている)
abc.efg ( . はドット演算子を意味するため名前に利用できない)
変数 (全角は以ての外!)
hensuu (これも全角だからダメ!)
test-desu ( - は減算演算子を意味するため名前に利用できない)
123abc (数字が先に来る変数は作ってはいけない)
このような変数は作成できません。これは関数にも通用することですね。
[ 重要 ]
・変数は使うことを明示的に宣言しないと使えない。
・変数は半角英数字(記号_を含む)で宣言するのが基本である。
・数字からはじまったり、全角が入っている変数は作れない。
・@ や - や + のような、変数名に認められていない記号は使ってはいけない。
次に、変数の宣言方法をみていきましょう。変数を宣言するには、
次の構文で宣言します。
[ 変数の宣言 ]
型名 変数名;
数値系のデータ型の場合は、いくつか種類があります。
[ 数値系のデータ型 ]
[ 型名 ] int
[ 正式名称 ] 符号付き整数型
[ 範囲 ] -2147483648 〜 2147483647
[ 備考 ] 特に何もない限りは、この型で宣言します。
[ 型名 ] short
[ 正式名称 ] 符号付き短長整数型
[ 範囲 ] -32768 〜 32767
[ 備考 ] 扱える値の範囲がint型に比べ小さいです。
[ 型名 ] long
[ 正式名称 ] 符号付き倍長整数型
[ 範囲 ] -2147483648 〜 2147483647
[ 備考 ] 16ビット開発環境では、int型より扱える範囲が広くなるという、
特徴がありましたが、今では、扱える範囲は全く同じになりました。
[ 型名 ] float
[ 正式名称 ] 単精度浮動小数点数型
[ 範囲 ] -10の38乗 〜 10の38乗(実際の有効範囲は7桁)
[ 備考 ] 実際に扱えるのは7桁までです。また、小数点は、あまり細かい値だと、
一部切り捨てられます。(このことを「精度落ち」といいます。)
[ 型名 ] double
[ 正式名称 ] 倍精度浮動小数点数型
[ 範囲 ] -10の308乗 〜 10の308乗(実際の有効範囲は15桁)
[ 備考 ] 実際に扱えるのは15桁までです。これも細かすぎると、精度落ちします。
float型は、こんにちでは単なるメモリの節約にしかすぎないので、
小数を扱いたい場合は迷わずdouble型を使用すべきでしょう。
ちなみに、符号の有無も決定することができます。
通常の状態では、上にあるとおり、全て±の値が扱えるようになっています。
しかし、符号修飾子であるunsignedを付加することにより、
マイナスの値は扱えなくなりますが、代わりにプラスの値で扱える値が倍になります。
たとえば、符号なしのint型変数aを宣言したいなら、
unsigned int a;
このように書けばよいです。これが、宣言の方法です。
これを書くことで、aという符号なし整数型が有効になります。
一度宣言を実行すると、再び型を変えるようなことはできません。
Basic系の言語だと、変数の宣言もいらないし、今まで数値を入れていたのに、
途中で文字を入れるように切り替えたりできるものがありますが、
C/C++言語は型に対しては非常に厳格な言語です。間違ってもそういう処理を、
しようとしてはいけません。
[ 重要 ]
・負の数が不要で、正の数の扱える範囲を広げたいときは、unsignedを付加する。
・一度宣言した変数は、後でデータ型の変更は決してできない。
[E]おわりに
今回はここまでです。
次回は、ポインタ・文字列・構造体の補足・確認事項です。
------------------------------------------------------------------♪♪♪♪♪
[問題 - 48]
なし
♪♪♪♪♪------------------------------------------------------------------
[解答 - 47]
[1] throw
[2] catch
[3] try
最新の記事
-
Visual C++ プログラミング 第48号
1/8
-
Visual C++ プログラミング 第47号
1/7
-
Visual C++ プログラミング 第46号
11/28
-
Visual C++ プログラミング 第45号
11/12
-
Visual C++ プログラミング Extra 2
10/30
このメルマガもおすすめ
-
Office & VBA パーフェクトマスター
- 最終発行日:
- 2012/05/16
- 読者数:
- 5858人
Excel・Access・Word等の今さら聞けない「疑問」、今すぐ知りたい「困った」、たちまち解決!のmoug(モーグ)がお送りする、関数初心者からVBA手練の方への+1テクニックメールマガジン!読めば納得の情報マガジンです。
-
ネットワークエンジニア
- 最終発行日:
- 2012/05/04
- 読者数:
- 348人
ネットワークエンジニアはコンピュータでソフトウェアを開発する時、参考にできるC・VC言語の情報マガジンす。
-
全部フリーソフト!!
- 最終発行日:
- 2012/05/22
- 読者数:
- 5191人
ネット上にはこんなに便利なソフトがいっぱい。仕事にも、遊びにも、あると絶対にお得で楽しいソフトを1つずつご紹介します。
-
かめかめVBA(Excel/Access)
- 最終発行日:
- 2012/04/27
- 読者数:
- 196人
超初心者からプロフェッショナルまで完全網羅!体系的にしっかりと学んで実践で使えるようになりたい方や資格取得をめざすあなたを応援します!実践的でわかりやすいVBA講座です。
-
C#プログラミングレッスン
- 最終発行日:
- 2012/05/22
- 読者数:
- 940人
C#での .NETプログラミングを易しく丁寧に解説するメールマガジンです。「C#プログラミング・レッスン」で、.NETプログラミングをマスターしましょう。



