はじめに
かなり投稿を休んでしまった気分。
今日から毎日投稿を再開できそう。てか、する。
ロベールのC++
前回の投稿から少し範囲が飛んでいますが、qiitaにかけなかったとき裏でやっていたので問題ないです。
08-11 iostreamの謎
いままで、C++でコードを書くときに <iostream> を include してきた。 <fstream> が出てきたとき、名前が似ているのでなにか関係あるのかなと思っていた。
なんと stringstream fstream は iostream の派生クラスであった。また、 iostream は ostream や istream の派生クラスのよう。
istreamが入力のためのクラスで std::cin はこのクラスにある。また ostream が 出力のためのクラスである。
i + o で io になってたのか。なかなかおもしろいな。たぶん、 i は in , o は out って意味かな。
ifstream 、 ofstreamは std::ios::in , std::ios::out をつけなくても良いとコメントにて教えていただきました。
私は、 なんで if や of が名前に使われているのかと疑問に思っていましたが、実際には if とかの意味ではなくて、入力専用の i が fstream にひっついてただけなんですね。笑
fstream と ifstream ofstreamは関係性があるので、派生クラスなのかと思ったが違う。 fstream は iostream の派生クラスである。
fstream& は istream& へアップキャストできる。(アップキャストできると聞いて、なにができるのかわからない。アップキャストももう一度調べ直して見る必要がある。)
std::coutとstd::cerrの使い分け
std::cerr っていうのは、エラーメッセージを出力するための機能である。 どうして使い分けるの?というと、std::cout と std::cerr の出力先をそれぞれ変えることができるからである。また、エラーの出力処理は std::cerr でする といったルールがあるみたいなので、可読性が上がるみたいね。
マニピュレータ
マニピュレータとは、動的配列のメンバ関数みたいな様々な機能をもったものである。
std::cout << 〇〇
std::cin >> 〇〇
〇〇の部分にマニピュレータを書く。
機能はたくさんある
マニピュレータの機能を使うのがめんどくさくて printf を使う人も多いみたい。でも、マニピュレータにしかできないこともあるため、使い慣れといたほうがいいみたい。
キャスト
やっとキャストの区別が付きました!
int(c)は前回の投稿でやったがもう一度書いとく
int(c)
int(c) の正体は 関数形式の明示的型変換 である。関数みたいな見た目なので、関数形式って呼ぶみたい。そして、これを使えるのは、単純型指定子か、typename指定子である。単純型指定師とは、 int とか double とか char とか他にもたくさんある。
(int)c
これは、C言語形式のキャストでありとても危険なキャストである。なぜ危険なのかというと、const_cast や static_cast などのキャストを順番に当てはめて、当てはまるのもがあったら そのキャストを実行するというような感じである。
詳しくはこちら
つまり、使わないほうがいい。てか、使ったら危険。
static_cast<int>(c)
C++でキャストをしようと考えるなら、とりあえず static_cast で問題ないみたい。
reinterpret_cast との使い分けが難しいみたいだがそれはまた明日調べるとしよう。
ブロック崩し
初期準備
プログラミング入門サイト~bituse~のブロック崩しを参考にして作っていこうと思う。どのようなときにクラスを使うのか、などのことがまだわからないため今回はこのサイトを参考にして進めていこうと思う。
また、このサイトではDXlibで画面描写や音声を使用しているがMac非対応なため、 OpenGL を使って画面描写をしようと思う。 OpenGL ではサウンドの利用ができないため、サウンドは余裕があればすることにする。
openGLの導入
導入できたと思ったがコンパイルするとエラー出る。
解決策
ここに解決策が乗ってそうなので、時間がとれたとき少しずつ直していこうと思う。
xcodeだと、簡単にOpenglが使えるみたいなのでそれまではxcodeで開発をすすめる。
終わりに
久しぶりの投稿になってしまったが今日からまた再開する!
おやすみなさい