[本]EffectiveC++ 改訂2版
- Effective C++ 原著第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)/スコット・メイヤーズ
- ¥3,990
- Amazon.co.jp
リンクがなかったので↑は3版だけど・・・。
C++をさらに理解するためのバイブルとして扱われているらしい第2版。
これから読みすすめるところです。
この書籍の目的は、
「言語としてのC++は知っていて、多少は使ったことはある、そのような人
又は中級者以上のプログラマが言語を効果的使うことにより、ソフトウェアを
読みやすく、保守が簡単で、拡張可能で、効率がよく、思い通りに動くものに
するための手引きとすること」
のようです。
これらが50項目にわたって書かれている。
目次を読んだ限り、書籍で学習しただけではいまいち利便性や使い道、使い方が
わからない部分も内部的な動きから示しているようであり、興味深い。
一通り読んだら、(著作権侵害とかならないように)、キーワードとなりそうな
大事な部分をここでも出していきたいと思う。
つまり、気になったら買えと。
[目次]
第1章 CからC++への移行
1項 #define ではなく、constとinlineを使う
2項 <stdio.h>ではなく、<iostream>を使う
3項 mallocとfreeよりも、newとdeleteを使う
4項 コメントはC++スタイルで書く
第2章 メモリ管理
5項 newとdeleteのペアは、同じ形式に揃える
6項 デストラクタでポインタメンバにdeleteを使うのを忘れない
7項 メモリ不足に備える
8項 operator newとoperator deleteを書くときは規約を守る
9項 「普通」形式のnewを掩蔽(えんぺい)しないよう注意する
10項 operator newを書くならoperator deleteも書く
第3章 コンストラクタ、デストラクタ、代入演算子
11項 メモリを動的に割り当てるクラスでは、コピーコンストラクタと
代入演算子を宣言する
12項 コンストラクタでは、代入よりも初期化を使う
13項 初期化リストのメンバは、宣言した順に並べる
14項 基底クラスには仮想デストラクタを持たせる
15項 operator=を書くときは、*thisへのリファレンスを返す
16項 oprator=では、全てのデータメンバに代入する
17章 oprator=では、自分自身へ代入するケースをチェックする
第4章 クラスと関数:その設計と宣言
18項 クラスインターフェイスが完全かつ最小限になるまでがんばる
19項 メンバ関数、非メンバ関数、friend関数を使い分ける
20項 データメンバをpublicインターフェイスに入れるのはやめる
21項 使えるときは必ずconstを使う。
22項 値渡しよりも、リファレンス渡しを使う
23項 オブジェクトを返さなければならないときに、
リファレンスを返そうと頑張るのはやめる
24項 関数のオーバーロードとデフォルトつきにパラメータは慎重に使い分ける
25項 ポインタと数値型とにオーバーロードするのは避ける
26項 潜在的な多義性に対するガードを固める
27項 暗黙のうちに生成される不要なメンバ関数は、明示的に使用を禁止する
28項 グローバルな名前空間は分割する
第5章 クラスと関数:その実装
29項 内部データの「ハンドル」を返すのはやめる
30項 メンバ関数は、自分よりもアクセス制限がきついメンバへの
非constポインタや参照を返さないようにする
31項 関数は、ローカルオブジェクトへのリファレンスや関数の中で
newで初期化したポインタの参照先を返してはならない
32項 変数の定義はできるだけ後回しにする
33項 関数はよく考えてからインライン化する
34項 コンパイルするファイル間の依存性はできるだけ減らす
第6章 継承とオブジェクト指向設計
35項 publicに継承するときは、「その一種である」関係のモデルか
どうか確認する
36項 インターフェイスの継承と実装の継承とを区別する
37項 継承した非仮想関数を再定義してはならない
38項 継承したデフォルトパラメータ値を再定義してはならない
39項 継承の階層構造を下る方向のキャスト(ダウンキャスト)は避ける
40項 「それをもっている」関係や「それを実装手段とする」関係は、
層を重ねる形でモデル化する
41項 継承とテンプレートの違いを理解する
42項 privateな継承はよく考えてから使う
43項 多重継承は慎重に使う
44項 あなたの意図することを言う、自分が言っていることの意味を
理解する
第7章 その他
45項 C++がどんな関数を黙って書き、呼び出しているか知る
46項 ランタイムエラーよりは、コンパイル時やリンク時の
エラーのほうがよい
47項 非ローカルstaticオブジェクトは、使用前に必ず初期化されるようにする
48項 コンパイラの警告に注意する
49項 標準ライブラリに精通する
50項 C++をもっと理解するために
[本]明快入門VisualC++2005ビギナー編
- 明快入門Visual C++ 2008 ビギナー編 (林晴比古実用マスターシリーズ)/林 晴比古
- ¥3,990
- Amazon.co.jp
一通り眺めただけだけど、総評としてはまぁまぁ。
序盤はVSの使い方とかでつまらなかったけど、ホントのビギナーには
役に立つのでしょう。
(自分はツールの使い方は全部雰囲気でやってたけど。)
個人的に役に立ったのは、
・デバイスコンテキストを使用した描画の仕方
・初級プログラマでは使用頻度の低いコントロールの制御方法
(スクロールバーとかリストコントロールとか)
特にピクチャコントロールへの描画は個人的に気に入った内容が載ってました。
シニア編も目次だけ読んだけど、自分が今試したいこと(マルチスレッド)とか
載ってる気配なかったので、買うことはないでしょう。
高いし。
わからない箇所があったら立ち読みして覚えて帰るべし。
[日記]改めて自己分析
自分はモノつくりに興味があると思っていたけどどうも違うかも知れない。
好きなのは多分、支配する側になること。
・プログラムの開発というよりも、プログラムという言語を使いこなす
・開発に関するツール類を使いこなす
・自分に携わる人をマネジメントする
こういう点を含めて、自分は上にあがりたい人間だとおもふ。
まぁ当然上に上がるにはそれ相応の基礎が必要であって、
それを応用する力がさらに必要なわけですが、まだまだ
ピヨピヨなので日々勉強しなくてはいけないわけです。
こういった姿勢が高校からできていれば、東大京大とかは
楽勝だったと思う。多分。
なんだかんだいって、世間は学歴社会です。
学歴がある=それ相応の学ぶ力と意思があると思うのです。
反論は自由ですが、受け入れません。俺様主義だから。
[MFC]ファイルオープンダイアログ
ファイルを開くダイアログの表示
[作成環境]
・Visual Studi 2008 Standart Edition
・MFC-ダイアログベース
ボタンとエディットボックスを配置する
<ボタン>
ID:IDC_FILEOPEN
メッセージ:BN_CLICKED
ハンドラ:OnBnClickedFileopen
<エディットボックス>
ID:IDC_FILEPATH
メンバ変数(Value):CString m_FilePath
メッセージ:EN_CHANGE
ハンドラ:OnEnChangeFilepath
void CFileOpenDlg::OnBnClickedFileopen()
{
// TODO: ここにコントロール通知ハンドラ コードを追加します。
CFileDialog fdlg(TRUE);
if(fdlg.DoModal() == IDOK)
{
m_FilePath = fdlg.GetPathName();
UpdateData(FALSE);
OnEnChangeFilepath();
}
}
void CFileOpenDlg::OnEnChangeFilepath()
{
// TODO: これが RICHEDIT コントロールの場合、
// まず、CDialog::OnInitDialog() 関数をオーバーライドして、OR 状態の ENM_CHANGE
// フラグをマスクに入れて、CRichEditCtrl().SetEventMask() を呼び出さない限り、
// コントロールは、この通知を送信しません。
// TODO: ここにコントロール通知ハンドラ コードを追加してください。
UpdateData(TRUE);
}
CFileDialogクラスのDoModal()を呼ぶと、基本的なファイルダイアログが表示される。
コンストラクタに渡す引数はたくさんあるが、第1引数に渡すBOOL値により
保存か開くかが変わる。
その他の引数はMSDN見るべし。
CFileDialogコンストラクタ 第1引数
TRUE:ファイルを開く
FALSE:ファイルを保存
IDOKが返ってきたら、ファイルパスを取得して、エディットボックスの
コントロール変数に突っ込み、更新。
コレによりエディットボックスは更新されるが、更新通知のメッセージは
投げられないようなので、自分で投げる。
処理によっては投げる必要はないが、処理しだいでは使うこともある。
(09/03/15追記)
イベントハンドラを直書きするのはよろしくないですね。
その後いろいろ勉強してますゆえ。
でも最近MFCはさわってないので修正コードはいずれ。
[C++]クラスの分け方
今日の研修でクラスの分け方の手法を聞いた。
自分としてはかなりの革命。
■クラスの抽出
これはいろいろな書籍で言われているように、要件の中の名詞を抽出し、
その中に属性(メンバ変数)と動作(メンバ関数)を持つものをクラスとする。
■属性の抽出
クラスに対し、「クラスの~~」と、目的語として表現できるものを設定する。
■動作の抽出
クラスに対し、「クラスを~~する」と表現できるものを設定する。
多分当たり前なのだろうけど、意外とできていなかった。
上記を遵守すれば、機能的凝集度を必然的に満たしてくる。
このほかに、関連の分析、継承の分析があるが、これらのうまい
決め方はまだよくわかっていない。
凝集度と結合度については、オブジェクト指向のモジュール決定において
重要視されている。
また読むように指定された書籍が増えたorz
↓出だしを読んだけど、なんか微妙。
- これならわかるC++―挫折しないプログラミング入門 (ブルーバックス)/小林 健一郎
- ¥1,995
- Amazon.co.jp