C++

C++において、オブジェクトが持てるメモリの容量には限界がある。
スタックで確保しようが、ヒープで確保しようが、この限界を超えた場合、もはやそのコードは例外を生成する。

また、ヒープ領域の限界はその時のPCの状況で変化する。

……ゲームはメモリを大量に使うので、なるべくプログラム側で節約するよう心掛けた方がよい。
このエントリーをはてなブックマークに追加

お疲れ様でした! これにてC++の基礎は全てマスターしました。
しかし、C++の世界は闇深く、紹介していない機能も無数にあります。無数と書いたのは、本当に無数だからです。例えばマニピュレータを独自に作成したり、演算子の挙動を書き換えることもC++では不可能ではないからです。

また、最近ではあまり使われていませんが、継承あるいは多重継承や、テンプレートメタプログラミングの為のテンプレート機能、STLの話など、高度なトピックは挙げればキリがありません。
ではそれらの機能が必要なのかと問われるとその限りではないのです。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ボクはあなたにC++を最速で教える為に色々なことを考えました。最終的には、高度なトピックを1つだけあなたに教えるとしたら、なにを教えるべきなのだろう。とこのような考えに至りました。

ボクはあなたにオブジェクト指向プログラミングを教えることにしました。
理由は単純で、一番使われているからです。つまり一番使いやすいということです。
なのでこの16回の講義を通してオブジェクト指向に関連する機能のみに絞り、集中的に教えたつもりです。今のあなたは大規模なソースコードを書くことができます。関数の中身はC的な手法を用いることが多くなるかもしれませんが、CだろうがC++だろうがifの書き方は変わりません。胸を張ってC++プログラマーと名乗って下さい。

格闘技には様々な武術がありますよね。空手とか剣道とか……あなたはその中で最もメジャーである武術を習得したのです。それがオブジェクト指向プログラミングというプログラミングスタイルです。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
C++プログラミングは無知との遭遇の連続です。これからも是非、色々なサイトや本を参照し、様々な知識と技術を身に着けて下さい。そして、いっぱいコードを書いて、たまには自身のスパゲティに足をすくわれて絶望して下さい。C++はもうボクには無理だと思った時こそ、成長のチャンスかもしれません。

あなたがここまで読んでいることに喜びを隠せません。
このエントリーをはてなブックマークに追加

C言語でやったようにテキストファイルへの出力を学びましょう。もちろんバイナリファイルへ出力してもよいのですが、文字列を出力するのはもっぱらテキストファイルが多いのです。
例えば、ログファイルの生成やセーブデータの作成など

C++でのファイル出力は驚くほどシンプルです。ファイル出力用のオブジェクトを作成し、ストリームへ出力する<<を使用します。

167

168


std::ofstreamはファイル出力用のクラスです。生成するオブジェクトのコンストラクタには生成する物理ファイル(テキストファイル)のパスと名前を指定します。拡張子を忘れないで下さい。

ofstreamはストリームのように扱うことができ、<<演算子で画面へ出力するのと同じようにファイルへ書き込むことができます。
もちろんマニピュレータの効果も健在です。
このエントリーをはてなブックマークに追加

バイナリファイルから入力を受け付ける手法を学びます。
バイナリファイルとは、あらゆる種類のファイルを指します。
この手法を学ぶことでどのようなファイルのデータでも読み込めるようになります。

Officeソフトはお持ちでしょうか?
もし持っていないのであれば、Apache OpenOfficeをインストールするのをおすすめします。

今回は.csvファイル内のレコードを読み取る手法を学びます。
しかし、この手法は.csv以外にも様々なファイルに応用可能です。
.csvとは、,で区切られたテキストファイルです。
161


160


account.csvファイルをC:\Users\貴方のPCのユーザー名\source\repos\Project1\Project1へ作成しました。これはVisual Studioのバージョンによって配置場所は変わるのでご注意下さい。
筆者の環境はVisual Studio 2017です。Source.cppと同じ場所に配置すればよいです。
163


ここまで読んでパスがよく分からないという方はこのサイトの上の方を見て下さい。http://jamfolder.work/lessonD.cppと書かれているのが見えるでしょうか? これがパスです。試しにLessonDのDをPにしてエンターを押してみて下さい。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
それではコードの説明をしていきましょう。
まず、ファイルを操作する為にはfstreamをインクルードします。この中にはファイル操作の為のクラスが定義されており、C++でのファイル操作は、予め作られたファイル操作クラスを宣言して行います。

ファイル入力を受け付けるクラスはifstreamです。
std::名前空間に定義されています。
コンストラクタには2つの引数を受け付けます。第一引数にはファイルのパスを指定します。第二引数ではそのファイルをどのように扱うかを指定します。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ファイルオブジェクトには様々な関数が定義されており、その中で最も扱いやすいのがgetlineです。getlineは一行読み込みます。getlineの第一引数には、読み込んだテキストを格納する格納先の先頭アドレスを指定します。配列名はそのままで配列の先頭アドレスを表します。
第一引数の後ろには、最大何文字まで読み込むかを指定します。この文字数より1少ない数に到達した時か、レコードから改行を検出した場合、getlineは読み込みを終了します。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
また、getlineは第三引数を受け取ることもできます。
getlineは第三引数に指定した文字が読み込まれた時も処理を終了できます。つまり、','を指定することで、.csvのデータを1つずつ受け取ることもできます。

166


ちなみに数値データを受け取りたい場合は、数値を.csvの中に書いて、読み出す際に文字列として受け取ります。それをatoiで変換するとよいでしょう。
このエントリーをはてなブックマークに追加

C++でコーディングしていると、関数が長大になることがあります。
そんな関数をクラスに含めていると、クラスの本質であるグループ化がわかりにくくなります。
その関数がプログラマの視界を占有するからです。


OpenningTheBoxのような長い関数は、別の.cppファイルへ記述することもできます。
その場合、OpenningTheBoxをプロトタイプ宣言と定義へ分け、プロトタイプ宣言のみをクラス内に記述します。

コンストラクタは短いのでそのまま書いた方が分かりやすいと思われる。

ソリューション エクスプローラー→ソースファイルを右クリックし、追加→新しい項目よりOpenningTheBoxを記述するための.cppファイルを作成します。
9



新しい.cppファイルには、BlackBoxクラスを教えてやる必要があります。
BlackBox.hをインクルードしてあげましょう。


関数を記述する際には、その関数がどのクラスに含まれているのかを明示する必要があります。
クラス::関数名 でどのクラスに所属している関数なのかを明示します。


ではmain関数から呼び出して実行してみましょう。

10
このエントリーをはてなブックマークに追加

↑このページのトップヘ