FC2ブログ

ちょっと日常:三項演算子a?b:c, 列挙体enum, vector, クラスの継承・純粋仮想関数

日常なのであんまり真剣に読まないでね.


突然出てきたらびっくりします.三項演算子.疑問に思う…のがよいかもしれないな.
ただの<条件> ? <真の実行式> : <偽の実行式>
です.これがif()の中にそのまま現れたのです.最初なにかと思いました.
三項演算子?キモッッて中学の頃に見た覚えがあったからすんなり理解できたわけで…


逆に最近にちょっとした記事で見ただけの知識,それが生きたのは列挙体に関して.
列挙体は

enum <識別子> {<要素1>, <要素2>, …} <変数名>;
enum hand {left, right} person;
と書きます.
全然知りませんでした.ちょっと恥ずかしい.
識別子と変数名のどちらかは省略可能.え?意味わかんない…と思ったけど

考えた結果,識別子はクラス名のようなもので,そのクラスの構造を持つものをいろいろ用意できる…いや,だから識別子なんですけど.こっちは容易に理解できるし,私の見たenumもこれだった.変数名はクラスを定義した後に変数を作るのと同じ感覚.
じゃあ識別子を書かないって?役割を持たせた列挙体を一つに限って用意したいとき(があるのか・・?),実現できます.他に使い道は浮かばないので,どう使うかが問題の気がします.

そもそものenumの使い方?中身?としては,例えばhand::leftと書いてみたりするんですが,leftにはint型の0が,rightにはint型の1が列挙変数に関連付けられています.とはいえ,hand = 0;とするのは定義されておらず,hand = (enum hand) 0;という形が標準です.暗黙の型キャストはコンパイラ依存と言えます.
また,switch文ではswitch(hand) { case: left …と書くことができる.


vectorが使えたら私もデータ処理とか楽しめるんじゃないかと思って,やり始めました.
結果はでてないけど.
とりあえずvector.push_backでデータを一個追加することができると知ったよ.どう追加されてるのさ…
一次元データがどう格納されて,push_backやpop_backは最後尾で行われるかとか,そういう点を理解しなきゃいけない.
あと二次元データの扱い方があればそこも勉強しなきゃ.


さて,まとめたかったクラスの継承.そういうものがあるっていうことだけは知ってたけど,まとめて読んだのは初めてだった.

・クラスの継承は":"でおこなう.: public <親クラス名>とかprivate <親クラス名>とか.
親クラスのpublicメンバ関数をpublicで継承したいときにpublic指定,privateで継承したいときにprivate指定するだけ.
・メンバ変数を初期化して継承するには<親クラス名>に続いて","を置いて,<メンバ変数1>(<値1>), <メンバ変数2>(<値2>),…としていく.
・virtualでメンバ関数を仮想関数に.すると継承した子クラスで再定義ができるようになる.
・純粋仮想関数virtual <メンバ関数名> = 0; 関数の実体を定義せず,継承される前提で仕組みを内包させておく使い方だろうか.
・抽象クラスとは,純粋仮想関数などを使って実体を作らないクラス.実体を作れない…そのことを「インスタンス」という言葉を使っていたけど私にはまだわからなかったな.
・public,privateの他にprotectedというものがある.親クラスで使って,その時点ではprivateと同じだが,継承クラスでpublic扱いで継承される.
・他にも,子クラスのpublic内でusing <親クラス名>::;なんてすると親クラスで定義しつつも使えないようにしてあった関数を,親クラスで行った実装を引き継いで使うことができます.これはちょっとした発見だったな.
・あと,親クラスのデストラクタはvirtualにしとかないとね,と.
・他には,this->ってなんだよ!とか.いや,そのままなんですけどね.クラスの実装の中で,メンバ変数をいじるときにthis-><メンバ変数名>と書く・・はず.


こんなとこかな.うーん,文にしてまとめるには多すぎるし何より教科書的な内容だから箇条書きのままで.
それでは.
スポンサーサイト



コメントの投稿

非公開コメント

プロフィール

satsuki

Author:satsuki
記事を消しつつ、ころころ変えながら運用中

最新記事
最新コメント
月別アーカイブ
カテゴリ
訪問者数
検索フォーム
リンク
QRコード
QR