2026
2025
2024
2023
2022
2021
2020
2019
2018
2017
2016
2015
2014
2013
全28件 (28件中 1-28件目)
1
プログラミング言語C++ を読んでいます。http://www.amazon.co.jp/dp/475611895X/15.6.1 配列の確保・operator new[], operator delete[] も同様。Employee::operator new[](sizeof(Employee)*s+delta) の delta は実装が定義する最小限のオーバーヘッドになる
2009年02月28日
コメント(0)
プログラミング言語C++ を読んでいます。http://www.amazon.co.jp/dp/475611895X/15.6 自由記憶領域・operator new() と operator delete() を定義すればクラスのメモリ管理を制御することができる。しかし、大域の置き換えには勇気がいるので特定のクラスについてのみ考えれば限定的になってよい。・operator new() と operator delete() は暗黙のうちに静的メンバになっているので this ポインタを持たず、オブジェクトを参照できない。これらのメンバはコンストラクタが初期設定できて、デストラクタがクリーンアップできる記憶領域を提供する。サイズを渡さないと汎用アロケータと比べてスピードやメモリの消費量を大幅に改善することが難しくなる。・空でもよいので仮想デストラクタを作っておかないと派生したデストラクタのサイズがわからなくなる。
2009年02月27日
コメント(0)
プログラミング言語C++ を読んでいます。http://www.amazon.co.jp/dp/475611895X/15.5.1 基底クラスと派生クラス・派生クラスのメンバポインタに基底クラスのメンバポインタを代入しても大丈夫だが逆は成り立たない。この特徴を、逆変:contravariance と呼ぶ。
2009年02月26日
コメント(0)
プログラミング言語C++ を読んでいます。http://www.amazon.co.jp/dp/475611895X/15.5 メンバポインタ・メンバポインタはあるクラスのメンバを間接参照するための機能を提供している。これはクラスオブジェクトのなかのメンバの位置と考えることができる。・メンバポインタは変数ポインタや関数ポインタとは異なり、メモリの位置を示すポインタではない。メンバポインタはポインタというよりも構造体オフセット、配列の添え字に近い。
2009年02月25日
コメント(0)
プログラミング言語C++ を読んでいます。http://www.amazon.co.jp/dp/475611895X/15.4.5 RTTI の使い方、誤った使い方・明示的な実行時型情報は、どうしても必要なときに限って使うべきです。・switch case のようなコードで typeid や dynamic_cast を使うと構造化が進まない。型に基づく実行時の区別が必要なら、ほとんどの場合 RTTI だけでなく、仮想関数を使うべきです。
2009年02月24日
コメント(0)
プログラミング言語C++ を読んでいます。http://www.amazon.co.jp/dp/475611895X/15.4.4.1 拡張型情報・オブジェクトの正確な型についての情報を知ることは、その型についてのより詳しい情報を取得、利用するための最初のステップに過ぎないことがよくある。・typeid から詳細な型情報を取得する方法は、複数のユーザー、ツールが型についての異なる情報を独立に提供する手段を提供する。
2009年02月23日
コメント(0)
プログラミング言語C++ を読んでいます。http://www.amazon.co.jp/dp/475611895X/15.4.4 typeid と拡張情報・dynamic_cast は派生クラスが渡された時にも正しく動作する。つまり、仮想関数と同じような柔軟性と拡張性を持っている。・typeid 演算子は非演算子の型を表すオブジェクトを作成してオブジェクトのクラス名やレイアウトを知らせる事ができる。値が 0 なら bad_typeid 例外を投げる。・cout << typeid(*p).name() で 文字列を取得できる。これはシステムが所有するメモリの中にあるのでこの文字列を delete[] しようとしてはならない。
2009年02月22日
コメント(0)
プログラミング言語C++ を読んでいます。http://www.amazon.co.jp/dp/475611895X/15.4.3 クラスオブジェクトの構築と解体・コンストラクタはボトムアップに行われ、デストラクタはトップダウンで行われる。・構築、解体の細かい順番に依存するのは非常によくないがオブジェクトが完成していない時点で仮想関数 dynamic_cast, typeid を呼び出す際にはその順番を意識せざるを得ない。オブジェクトが構築途中の場合には、部分的に構築されたオブジェクトにしか過ぎない。
2009年02月21日
コメント(0)
プログラミング言語C++ を読んでいます。http://www.amazon.co.jp/dp/475611895X/15.4.2.1 static_cast と dynamic_cast・dynamic_cast を使えば、多相的な仮想基底クラスから派生クラスや兄弟クラスへのキャストを実行できるが static_cast はキャスト元のオブジェクトを解析しないので、このようなことはできない。・void* が指しているメモリについて、使える前提条件を何も持たないので dynamic_cast は void* からのキャストには使えない。この場合は static_cast が必要になる。・dynamic_cast も static_cast も const 除去の為には使えないのでこの場合は const_cast が必要になる。
2009年02月20日
コメント(0)
プログラミング言語C++ を読んでいます。http://www.amazon.co.jp/dp/475611895X/15.4.2 クラス階層内での移動・単純継承は、単一の基底クラスを根とする木構造を作る。一方多重継承を使えば、根が1つになることはなく、そのため1つの階層の中にあるクラスが複数現れる場合には、そのクラスのオブジェクトを参照するときに注意が必要になる。、・多重継承で同じ基底クラスを2つ間に挟んでいる場合は、コンパイル時に検出できない曖昧性をもち、 dynamic_cast が0を返すので注意が必要になる。
2009年02月19日
コメント(0)
プログラミング言語C++ を読んでいます。http://www.amazon.co.jp/dp/475611895X/15.4.1.1 リファレンスの dynamic_cast・ポインタ型を引数として dynamic_cast を使った場合、失敗は 0 によって表されるがリファレンスの時はこの方法は可能ではないし、望ましいことでもありません。・ポインタ p があるとき dynamic_cast<T*>(p) は疑問文と見ることができる。リファレンスの場合はオブジェクトを参照していると考えて間違いない。したがって疑問文ではなく断言してよい。リファレンスを引数とする dynamic_cast の戻り値は dynamic_cast の実装自身によって暗黙のうちにテストされている。期待した型と異なる場合には bad_cast 例外が投げられる。
2009年02月18日
コメント(0)
プログラミング言語C++ を読んでいます。http://www.amazon.co.jp/dp/475611895X/15.4.1 dynamic_cast・dynamic_cast<T*>(p) を考えると p が T* 型か T のアクセス可能な基底クラスへのポインタなら単に p を T* に単純に代入したときと同じ結果が得られる。dynamic_cast は非公開、限定公開基底クラスの保護を破るようなことはありません。・dynamic_cast でダウンキャストやクロスキャストを行う場合には、多相型のポインタやリファレンスを渡さなければならない。
2009年02月17日
コメント(0)
プログラミング言語C++ を読んでいます。http://www.amazon.co.jp/dp/475611895X/15.4 実行時型情報・dynamic_cast はオブジェクトが期待した型なら有効なポインタを返し、そうでなければ null ポインタを返す。・基底クラスから派生クラスへのキャストは、ダウンキャストと呼ばれることが多く、派生クラスから基底クラスへはアップキャストと呼ばれ、基底クラスから兄弟クラスへのキャストはクロスキャストと呼ばれる。
2009年02月16日
コメント(1)
プログラミング言語C++ を読んでいます。http://www.amazon.co.jp/dp/475611895X/15.3.2.2 using-declaration とアクセス制御・using-declaration を使っても、アクセスできる情報は増えない。・ただし派生クラスで基底クラスの protected を公開してインターフェイスを指定することはできる。
2009年02月15日
コメント(0)
プログラミング言語C++ を読んでいます。http://www.amazon.co.jp/dp/475611895X/15.3.2.1 多重継承とアクセス制御・多重継承の束で複数の経路を通って名前、基底クラスに到達できる場合、アクセス可能な経路があれば、それらにアクセスすることができる。・複数の経路を介して到達できるものが1つのものである場合でも、それは曖昧さなしで参照できる。
2009年02月14日
コメント(0)
プログラミング言語C++ を読んでいます。http://www.amazon.co.jp/dp/475611895X/15.3.2 基底クラスへのアクセス・メンバ関数と同様に基底クラスにも private, protected, public を宣言することができる。・公開派生は派生クラスを基底クラスの下位型にする。・限定公開基底クラスは、それ以上の派生が必要なクラス階層で役に立つ。・非公開基底クラスは、基底クラスに対するインターフェイスに制限を加えてデータチェックを強化するようなクラスを定義するときに役に立つ。
2009年02月13日
コメント(0)
プログラミング言語C++ を読んでいます。http://www.amazon.co.jp/dp/475611895X/15.3.1.1 限定公開メンバの使い方・単純な非公開/公開モデルによるデータ隠蔽は、具象型の概念ではうまく機能するが、派生クラスのユーザーには、派生クラスと一般大衆の2種類のタイプがあり、派生クラス専用のサービスが提供できなくなってしまう。・限定公開のデータを使う必要はない。しかし限定公開メンバ関数についてはこのような問題はなく、派生クラス用の演算を指定するための悪くない方法になる。
2009年02月12日
コメント(0)
プログラミング言語C++ を読んでいます。http://www.amazon.co.jp/dp/475611895X/15.3.1 限定公開メンバ・protected メンバの使い方としては、派生クラス専用の積み木のような機能だけ提供しておく使い方がある。・派生クラスが基底クラスの限定公開メンバにアクセスできるのは自分自身の型のオブジェクトを参照しているときだけ。このような規則がないと派生クラスが他の派生クラスに属するデータを破壊するようなエラーが発生するため。
2009年02月11日
コメント(0)
プログラミング言語C++ を読んでいます。http://www.amazon.co.jp/dp/475611895X/15.3 アクセス制御・効率のよい非侵入的リストクラスは要素を管理するためのクラスを、非公開にするべきです。メンバ関数定義の中で :: でクラス指定をフルネームを使い行いスコープに入るようにしなければならない。
2009年02月10日
コメント(0)
プログラミング言語C++ を読んでいます。http://www.amazon.co.jp/dp/475611895X/15.2.5.1 仮想基底関数の上書き・派生クラスは、直接、間接の仮想基底クラスの仮想関数を上書きできる。2つの異なるクラスが、仮想基底関数の異なる仮想関数を上書きする時は、1つの関数で全ての関数を上書きしなければならない。・2つのクラスが1つの基底クラスを上書きするのに、片方がもう片方を上書きしない場合、そのクラスの階層はエラーになる。・仮想基底クラスの実装の全部ではなく、一部だけを提供するクラスは mixin と呼ばれる。
2009年02月09日
コメント(3)
プログラミング言語C++ を読んでいます。http://www.amazon.co.jp/dp/475611895X/15.2.5 多重継承の使い方・多重継承の単純でわかりやすい例としては、クラスの実装の為にもともと無関係だった2つのクラスを共存させるための糊としての使い方がある。こうすることで呼び出しを転送するタイプの関数を書かずに済ませられる。・抽象クラスの実装を提供するために多重継承を使う方法の方が重要な意味を持っていて、例えばインターフェイスと実装の詳細を基底クラスの両方の仮想関数を上書きする必要がある場合などがある。菱形継承がおきるときなどは必須な機能になる。
2009年02月08日
コメント(0)
プログラミング言語C++ を読んでいます。http://www.amazon.co.jp/dp/475611895X/15.2.4.1 仮想基底クラスのプログラミング・仮想基底クラスを持つクラスの関数を定義するときには、基底クラスが他の派生クラスと共有されるかどうかは事前にはわからない。・基底クラスを1度だけ呼びたいときには、最も下位の派生クラスだけから仮想基底クラスを呼び出すようにすればよい。
2009年02月07日
コメント(0)
プログラミング言語C++ を読んでいます。http://www.amazon.co.jp/dp/475611895X/15.2.4 仮想基底クラス・先の上書きの例がうまく動いたのは、基底クラスが安全、便利、効率的にコピーされていたから。基底クラスに含まれる物が大きければオブジェクトの複数のコピーを格納せずに済ます事が難しくなります。・このような共有のために仮想基底クラスがあります。派生クラスの virtual 基底クラスは、同じ(共有)オブジェクトによって表現されるからです。virtual が指定されていない基底クラスは、独自のサブオブジェクトを持つことになります。
2009年02月06日
コメント(0)
プログラミング言語C++ を読んでいます。http://www.amazon.co.jp/dp/475611895X/15.2.3.1 上書き・重複する基底クラスの仮想関数は、派生クラスの関数で上書きできる。・一般に、上書きを行う関数は、基底クラスバージョンを呼び出してから、派生クラス独自の仕事をする。
2009年02月05日
コメント(0)
プログラミング言語C++ を読んでいます。http://www.amazon.co.jp/dp/475611895X/15.2.3.1 上書き・重複する基底クラスの仮想関数は、派生クラスの関数で上書きできる。・一般に、上書きを行う関数は、基底クラスバージョンを呼び出してから、派生クラス独自の仕事をする。
2009年02月04日
コメント(0)
プログラミング言語C++ を読んでいます。http://www.amazon.co.jp/dp/475611895X/15.2.3 基底クラスの重複・複数の基底クラスを指定できるようにすると、1つのクラスが基底クラスとして2回使われることがあるが、これ自体が問題を起こすことはない。・ただし、共通した基底クラスの関数にアクセスする場合などは曖昧さが発生する可能性がある。この場合は直接の派生クラス以外からメンバを見えないようにするのがよいが、明示的にクラスを指定して曖昧さを回避する方法もある。
2009年02月03日
コメント(0)
プログラミング言語C++ を読んでいます。http://www.amazon.co.jp/dp/475611895X/15.2.2 継承とユーザー宣言・多重定義は異なるクラススコープをまたがっては適用されないので、異なる基底クラスの関数が持つ曖昧性は引数型からは解決されない。・異なる基底クラスで同じ名前を使っていてユーザーに引数型で使い分けさせたいときは using 宣言を使い共通スコープに関数を導入することで解決できる。
2009年02月02日
コメント(0)
プログラミング言語C++ を読んでいます。http://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9EC-%E3%82%A2%E3%82%B9%E3%82%AD%E3%83%BC%E3%82%A2%E3%82%B8%E3%82%BD%E3%83%B3%E3%82%A6%E3%82%A7%E3%82%B9%E3%83%AC%E3%82%A4%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA%E2%80%95Ascii-Addison-Wesley-programming/dp/475611895X/15.2.1 曖昧さの解決・2つの基底クラスが同じ名前のメンバ関数を持っている事があり、その場合はメンバ関数の頭に基底クラス名をつけて曖昧さを取り除く必要があります。・ただし明示的な曖昧除去は面倒なので、派生クラス側で新しい関数を定義することによって解決するのが良い。
2009年02月01日
コメント(8)
全28件 (28件中 1-28件目)
1


