Item 1:View C++ as a federation of languages. C++ はただの ”C のクラスがあるバージョン ” ではない → 例外安全 (29 項 ) 、テンプレート (41 項 ) 、オーバーロード等の導入によりデザインや目指すコードが 変化している プログラミング言語はあくまで言語.

Slides:



Advertisements
Similar presentations
2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
Advertisements

プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
Generic programming と STL
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
1.1 C/C++言語 Hello.ccを作りコンパイルしてa.outを作り出し実行する
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
情報処理Ⅱ 2005年12月9日(金).
アルゴリズムとデータ構造 2011年6月13日
構造体.
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
ファイル操作と文字列の利用.
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
補足説明.
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
情報工学演習I 第12回 C++の演習4(インライン展開).
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
東京工科大学 コンピュータサイエンス学部 亀田弘之
ローカル変数とグローバル変数 ローカル変数  定義された関数内だけで使用できる変数 グローバル変数 プログラム全体で使用できる変数.
プログラミング 4 記憶の割り付け.
2005年度 データ構造とアルゴリズム 第3回 「C言語の復習:再帰的データ構造」
第10章 これはかなり大変な事項!! ~ポインタ~
第7回 プログラミングⅡ 第7回
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
アルゴリズムとデータ構造 補足資料5-1 「メモリとポインタ」
P n ポインタの基礎 5 q m 5 7 int* p; int 型の変数を指すポインタ int* q; int 型の変数を指すポインタ int n=5, m=7; int 型の変数 int array[3]; int* pArray[3]; p = &n; ポインタにアドレスを代入しているのでOK.
一時的な型 長谷川啓
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
データ構造とアルゴリズム 第11回 リスト構造(1)
アルゴリズムとプログラミング (Algorithms and Programming)
参照されないリテラル 長谷川啓
文字列へのポインタの配列 static char *lines[MAXLINES]; lines[0] NULL
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
ポインタとポインタを用いた関数定義.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
アルゴリズムとデータ構造 2012年6月11日
ネットワーク・プログラミング Cプログラミングの基礎.
第5回 プログラミングⅡ 第5回
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
cp-2. 属性,アクセサ (C++ オブジェクト指向プログラミング入門)
cp-1. クラスとメソッド (C++ オブジェクト指向プログラミング入門)
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
コンパイラ 2012年10月11日
プログラミング 4 文字列.
岩村雅一 知能情報工学演習I 第12回(後半第6回) 岩村雅一
フレンド関数とフレンド演算子.
演算子のオーバーロード.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
2005年度 データ構造とアルゴリズム 第2回 「C言語の復習:配列」
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
情報処理Ⅱ 2005年11月25日(金).
プログラミング演習II 2004年11月 16日(第5回) 理学部数学科・木村巌.
プログラミング演習II 2003年12月10日(第7回) 木村巌.
プログラミング演習II 2004年11月 2日(第3回) 理学部数学科・木村巌.
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
情報処理Ⅱ 小テスト 2005年2月1日(火).
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
プログラミング演習II 2003年10月29日(第2,3回) 木村巌.
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング 3 ポインタ(1).
Presentation transcript:

Item 1:View C++ as a federation of languages. C++ はただの ”C のクラスがあるバージョン ” ではない → 例外安全 (29 項 ) 、テンプレート (41 項 ) 、オーバーロード等の導入によりデザインや目指すコードが 変化している プログラミング言語はあくまで言語 時と共に使い方が変わる。 ベースの 4 つのプログラム C C++ のほとんどが C から来ている。 C より良い方法 (2 項『 #define の ” 代わり “ 』や 13 項 ) 。 C++ の C 部 分は C の効率的なコードを適用する。 Object-Oriented C++ C++ のクラス部分。 Template C++ テンプレート (46 、 48 項 ) STL テンプレートライブラリの一種。多くのプログラマが使うときの Convention( 規則 ) があり、使い方が 決まっている。コンパイルができればいいという考え方は捨てた方がいい。 ex):vector 、 list 、 map おまけ Build-in type(char, int 等 ) は reference で関数に渡すより、 value で渡した方が早い。 ( 詳しくは 20 項 )

Item 2:Prefer consts, enums, and inlines to #defines. プリプロセッサ・・・コンパイラの前に一定の規則にしたがって処 理を加える。 #include や #define コンパイラ・・・人間の記述したソースコードを、機械語の羅列であ るオブジェクトコードに変換する #define VALUE 1 などで定義した変数などは symbol table にのらな いためコンパイル時にエラーがでてもその値だけが出たりして変数 がわからなくなる。デバッグが大変になる。 また、浮動小数点の固定値変数を定義する際は、 # defineだ とオブジェクトの大きさも 2 倍になる。 Const ならコピーしてオブ ジェクトに埋め込みしない ( プリプロセッサは変数を全て定義され た値に置き換えてオブジェクト生成 ) 。 → 解決法として const Value =1;

Item 2:Prefer consts, enums, and inlines to #defines. const char* const authorName = “Scott Meyers”; ポインタのアドレス固定と中身の固定。 String を使うほうがいい const std::string authorName(“Scott Meyers”); static の使い方部分 (p.5 がちょっと不明 ) クラス単位で持つ static な定数は宣言と定義はコンパイラに 依存する。 #define はクラスの定数としても使えない、カプセル化にも 使えない。

Item 2:Prefer consts, enums, and inlines to #defines. “enum hack” – 定数宣言時の初期化が許されない場合で配 列の初期化を要求された場合等に有効。 const の定数はアド レスを使えるが、 enum の定数はアドレスアクセスできな い。 つまり define に近い。参照とポインタを使わせたくないな ら enum を使う。 #define を使ってきた理由にマクロがある。 Inline とテンプ レートで代用 →const が使える。 プリプロセッサの #include と #ifdef/#ifndef はまだ使われる 価値がある。

Item 3:Use const whenever possible. タイトル通りどんなときでも可能な限り const を使う ( 超基 本、超大事 ) 。 ポインタの const は注意。 char *p = greeting; //non-const pointer, non-const data const char *p = greeting; //non-const pointer, const data char * const p = greeting; //const pointer, non-const data const char * const p= greeting; //const pointer, const data STL の iterator はポインターで作られており、 const な iterator は他のポインタを指すことは許されていない、 data は変えることができる。値を変えたくなければ const_iterator を呼ぶ。

Item 3:Use const whenever possible. p.10 わからん operator わかりやすい例 const のオブジェクトによって呼び出す関数を変えることができる (p.11) const のオブジェクトの中でも、そのオブジェクト内だけで使える変数 の値を変えたい場合は mutable を使う。内部内でしか使われない変数を 保持しており、他は const オブジェクトで問題ないときに有効。 const なメンバ関数と非 const なメンバ関数を用意し、実質同じ動作を する場合は const なメンバ関数を const_cast して const を外してやれば コードは半分にできる。 非 const メンバ関数から const メンバ関数を呼ぶのは安全。逆は駄目。

Item 4:Make sure that objects are initialized before they’re used. オブジェクト内のすべてのデータを、コンストラクタで初期化。 class A { A::A() : a(2) // こっちが初期化 { a = 2;// これは代入。 } private: int a; } 代入はコンストラクタが関数内にはいるときにすでにメモリを確保し ている分、重複して a を呼んでいる。 initialization list( メンバ初期化子リ スト ) を使う。 クラスの中のメンバは宣言されている上から順に初期化される。 initialization list は宣言の順番と一緒に書くべき。

Item 4:Make sure that objects are initialized before they’re used. static オブジェクトは使用される前に初期化を保証できないので注意。 static オブジェクトの参照を返す関数で対応する。 マルチスレッドではこれでも問題が残る。 static なオブジェクトは正直よくわからないので、デザインを気をつけ るということだけ覚えておく ( ごめんなさい ) 。