#はじめに
かなり投稿を休んでしまった気分。
今日から毎日投稿を再開できそう。てか、する。
##ロベールの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で開発をすすめる。
#終わりに
久しぶりの投稿になってしまったが今日からまた再開する!
おやすみなさい