virtual - みる会図書館


検索対象: プログラミング言語C++
96件見つかりました。

1. プログラミング言語C++

724 r. 10 派生クラス CO 襯 2 - c - れ 4 襯 e リファレンスマニュアル virtual access-specifieropt complete-class-name access-specifier VirtUaI 0 complete-class-name access-specifier. ・ private protected public 曖昧でない基底クラスへのリファレンスへと暗黙に変換してもよい ( 4.7 ) . タへと暗黙に変換してもよい ( 4.6 ) . 派生クラスへのリファレンスは , アクセス可能な られたい . 派生クラスへのポインタは , アクセス可能な曖昧でない基底クラスへのポイン 生クラス自身も , アクセス制御の支配を受ける基底クラスとして使用できる ; 11.2 を見 うことで , 派生クラスで再定義されている名前の基底クラスメンバをアクセスできる . 派 決演算子 : : ( 5.1 ) は , 基底メンバを明示的に参照するのに使用してもよい . これを使 照できる . 基底クラスメンバは , 派生クラスに継承 (inherit) されたという . スコープ解 バは , 派生クラスにおいて再定義されなければ , 派生クラスのメンバであるかのように参 平 ec 加 ( アクセス指定子 ) の意味に関しては , 11 を参照されたい . 基底クラスのメン の基底クラスと呼ばれる . このクラスは , その基底クラスから派生したという . access- ( 9 ) を示している必要がある . この指定されたクラスは , 宣言しようとしているクラス - 平 ec 加 ( 基底指定子 ) 中の class-name ( クラス名 ) は , 以前に宣言されたクラス 例えば , class base { public : int a, b; Class derived public : int b ′ c ー public base {

2. プログラミング言語C++

12.1 設計とプログラミング言語 class H { public : virtual void h( class X : public virtual F ′ public virtual G { public : void f( void 9 ( 房 class Y : public virtual G ′ public virtual H { public : void g( void h( class z : public virtual H ′ public virtual F { 521 public : ▽。土 d h( void f( void k(const F& a, a ・ f ( b ・ g ( void f00 ( X x ′ Y y ′ const G& b ′ 2 z ) const 日 & c) k ( 2 ′ x ′ y k ( y ′ x ′ 2 k ( x ′ 2 ′ y 房 / / ok / / ok / / 工ラー / / 工ラー 第 1 引数には F が要求される 第 2 引数には G が要求される

3. プログラミング言語C++

255 void screen clear ( ) { screen_init ( ) void screen refresh( ) for (int y=YMAX—1; 0<=y; y——) { fO て (int x=O; x<XMAX; x 十十 ) cout くく screen[x] [y]; cout くく′ \ n ′ 6.4 完全なプログラム / / 上から下へ / / 左から右へ 今や , これらの定義は , 変更できないライプラリの中にあって , のみ利用可能であると想像することができる . 6.4.2 形状ライプラリ 形状の一般的な概念を定義しなければならない . この定義は , それがすべての特定の形 コンパイラの出力として て , どの形状も , クラス shape により提供されるインタフェースを通じて排他的に操作 状 ( 例えば , 円や正方形 ) により ( 基底クラス shape として ) 共有されるように , そし shape* next ー static shape* list; struct shape { されるように , なされなければならない : shape ( ) virtual virtual virtual ▽土て tua1 ▽土て tua1 virtual virtual virtual virtual virtual list; list { next this point point point point point point point point north ( ) const south ( ) const east( ) const west( ) const neast( ) seast( ) nwest( ) swest( ) void draw( ) VOid move ( int ′ const const const const int )

4. プログラミング言語C++

13.7 アプリケーションの枠組み virtual virtual virtual virtual virtual virtual int result( ) void compute ( ) { } void write( ) { } int read( ) int retry ( ) { return 2 ・ void start( ) { } 595 派生クラスに要求される関数は , 純粋に仮想であると宣言される . 他のものは単純に何も しないと定義される . 枠組みは , 主ループと基本的なエラー処理メカニズムも提供する : p—>write ( p—>compute ( while (p->read( ) ) p—>start( try { for(; int main loop(filter* p) catch ( . if ( 土 ) return 土ー int i = p—>retry ( cout くく m. message( ) くく catch (filter: :Retry& Ⅲ ) { return p—>result ( cout くく "Fata1 filter error\n" 最後に私は次のように自分のプログラムを書くことができるだろう : return 1 ー

5. プログラミング言語C++

250 第 6 章派生クラス 派生クラスで定義されない純粋イ誤関数は純粋イ反想関数のまま残るので , 派生クラスは抽 象クラスにもなる . これはいくつかの段階を踏んでの実装を可能にする : class X { public : virtual void virtual void 抽象クラス x のオプジェクトの宣言 / / 工ラー class Y : public x { / / x : : f を上書きする void f ( X b ー / / 工ラー : 抽象クラス Y のオプジェクトの宣言 class 2 : public Y { / / x : : g を上書きする void 9 ( Y b ー / / 良い 抽象クラスの重要な使用法は実装の詳細をさらすことなくインタフェースを提供するこ とである . 例えば , オペレーティングシステムは , デバイスドライバの詳細を抽象クラス の裏に隠すかもしれない device { class character public : int virtual open ( ) virtual int close(const char*) virtual int read(const char*, int) virtual int write(const char* ′ int) virtual int ioctl ( int そして character device から派生するクラスとして , 夷祭のデバイスドライバを定 義するかもしれない .

6. プログラミング言語C++

604 第 13 章ライプラリの設計 class set { friend class set handle; protected : int handle count ー public : virtual virtual virtual virtual virtual set( ) VOid insert()* ) VOid remove ( T* ) int is member ( T* ) T* next( ) T* first( ) handle count( 0 ) { } handle count はハンドルによって増減して , 与えられた set についてそれを参照し set handle(set* pp) set* operator—> ( ) { return rep; public : set* rep; class set handle { ている set handle の数を反映する : set handle& operator= ( const set handle& r ) rep( r. rep ) { rep—>handle count 十十一 } set handle ( const set handle& r ) rep( pp ) { pp—>handle count 十十一 } r. rep—>handle count 十十一 if ( ——rep—>handle count rep = r ・ rep ー return *this ー 0 ) delete rep;

7. プログラミング言語C++

r. 10 派生クラス 730 リファレンスマニュアル ▽ > O ・エ・エ・エ 1 1 1 ・エ・エ・ 1 1 1 1 tO U) r-n tQ tn cd td void g( ) ,Q cd ▽ / / 工ラー′曖昧 : c の A か , それとも B の A か よい : v 部分オプジェクトは一つだけ r. 10.2 仮想関数 クラス base が vf という virtual 関数 ( 7.1.2 ) を持ち , それから派生したクラ ス derived も同じ型の関数 vf を持つならば , クラス derived のオプジェクトに対す る vf の呼び出しによって , ( たとえ , そのアクセスが base へのポインタやリファレンス を経由するとしても ) derived::vf が起動される . 派生クラス関数は , 基底クラス関 数を上書きする (override) といわれる . しかしながら , 関数の型 ( 8.2.5 ) が異なる場 , その関数は異なるものと見なされ , virtual メカニズムは起動されない ( 13.1 も 参照されたい ) . 派生クラスの関数が , 戻り型においてのみ基底クラスの仮想関数と異な る , というのはエラーである . 例えば , struct base { virtual void ▽ fl ( virtual void ▽ f2 ( virtual void vf3 ( ); void f(

8. プログラミング言語C++

273 Class window W menu / / メニューの要素 void draw( ) : ▽ 0 土 d get_input ( 房 6.5 多重継承 public virtual window { / / window: : get_input を上書きする これは , さらに派生したクラスですべてが一緒になる : class window W border and public virtual window, public window w banner, public window menu void get_input ( void draw( Class window w_xnput void draw( / / window: : get_input を上書きする public virtual window { 兄弟クラスが同じ関数を供給しないことを保証するためには , 曖昧さの缶が用いられる : public window W menu public window w_input ′ public virtual window ′ Clas S window w_input and menu / / の両方が w 土 ndow : : get_input を上書きする / / 工ラー window w_lnput と window W menu void draw( ) : 法で解決することができる : する関数をクラス window w border and menu に供給することによって , 通常の方 これはコンパイラによって検出され , 、、無作法な " 関数を上書きしてとにかく問題を解決

9. プログラミング言語C++

272 第 6 章派生クラス 単一継承が使用されるときは , 木の中での共有は , すべての関係する節点クラスに見える ようになるまで , 共有する情報をその木の根に向かって押しやることによって達成される ことにラ主意されたい . このことは , 根クラス , 又はそれに近いクラスが木の中のすべての クラスについての " 大域的 " 名前空間として働く原因となり , 結局たくさんの無関係な項 目を含むことになる , という不幸な影響を及ばすことになりやすい . これらのクラスがそれぞれ共通の virtual 基底で定義された関数を上書きすることが できるということは重要である . そうすることで , それぞれの兄弟は他の兄弟が演算を行 うやり方を変更できる . window が一般的な get_input ( ) を持っとしよう : Class window { / / 基本的な要素 virtual void draw( 房 virtual void get_input ( ある派生クラスは , 今 , 誰が提供するかということを気にせずに , get—input( ) を用 別の派生クラスは , 誰が使用するかということを気にせずに , get—input( ) を提供す いて演算を実装することができる : class window W / / banner の要素 void draw( public virtual window { ▽ 0 土 d update banner text ( void window w banner : : update banner text ( ) ることができる : / / banner の文字を変える get_input ( 房

10. プログラミング言語C++

13.3 抽象型 567 これまで述べたすべての面で , 具体型は組み込み型に似ている . その正味の影響は型の ユーザとその実装者の間を , そしてオプジェクトを作成するユーザとこのようなオプジェ クト上に作用する関数を提供するユーザの間をも固く結び付ける . 具体型をうまく用いる ために , ユーザはその特別な詳細を理解しなければならない . 個々のクラスを知るという 煩わしさからユーザを救うために頼ることのできるような , ライプラリにおけるすべての 具体型について成り立つ一般的な性質は ( 普通は ) ない . ある時にはそれは払うに充分値 する価格である . ある時にはそうでない . 個々の具体クラスの方がもっと一般的な ( 抽象 ) クラスよりも理解しやすく使いやすいこともあり得る . これは配列やリストのようなよく 知られているデータ型を表現するクラスについての場合に多い . しかしながら , 理想はいまだに , 効率を深刻に損なうことなく可能なところでなるべく 多くの実装を隠すことである , ということに注意されたい . インライン関数はこの文脈に おける大きな勝利であり , メンバ変数を , それらを公開にするか , 又はユーザにそれらを 直接操作することを許す set 関数と get 関数を提供することによってあらわにすることは , 良いアイデアであることはほとんどない . 具体型はいまだに型であるべきであり , 便利さ のために付け加えられたいくっかの関数を伴ったビットの単なる袋ではない . 13.3 抽象型 クラスのユーザとその実装者の間 , そしてオプジェクトを作成するコードとそのような オフ・ジェクトを使うコードの間の結び付きを疎にする単純な方法は , 共通する概念の実装 の集合へのインタフェースを表現する抽象基底クラスを導入することである . ある型 T の オプジェクトの set を考えてみよう : class set { public : virtual VOid insert()* ) virtual VOid remove ( T* ) int is member ( T* ) ▽土て tua1 T* first( ) virtual virtual T* next( ) virtual