派生クラスの説明

先週の問題提起をうけて、その解決手段でもある派生クラスについて説明する。

// 基本となるクラス
//        ⇒ "基底クラス" ("親クラス"と呼ぶ場合もある)
class Person {
private:
  char name[20] ;
  int  age ;
public:
  Person( char s[] , int a ) {
    strcpy( name , s ) ;
    age = a ;
  }
  void print() {
    printf( "name=%s , age=%d\n" , name , age ) ;
  }
} ;

// Personのデータにbukaをちょっとだけ加えたクラス
//        ⇒ 派生クラス(導出クラスと呼ぶ場合もある。)
class Joshi : public Person {
private:
  Person* buka ;
public:
  // 上司のデータ構造のコンストラクタ
  Joshi( char s[] , int a , Person* b )
    : Person( s , a ) , // 上司の名前と年齢を初期化
      buka( b )        // 部下の情報を保存
  {}
  void print() {
     Person::print() ;	// Joshiの名前と年齢を
     			// Personのデータとして表示
     buka->print() ;	// 部下の情報を表示
  }
} ;

int main() {
  Person saitoh( "T-Saitoh" , 44 ) ;
  saitoh.print() ;
  Joshi	 ashida( "Ashida Noboru" , 55 , &saitoh ) ;
  ashida.print() ;
  // 上司の情報と部下の情報がペアで表示される。

  // テーブルという配列に、saitohとashidaを登録。
  // table[]は、「Personへのポインタ」の配列。
  Person* table[2] ;
  table[0] = &saitoh ;
  table[1] = &ashida ;

  // table[]に格納された、saitohとashidaを表示する。
  for( int i = 0 ; i < 2 ; i++ )
    table[i]->print() ;
  // ただし、table[1] に代入する時点で、Joshi は Person に
  // 降格させられているので、部下の情報は表示されない。
}

プロジェクタ&エディタそのままで

いつもは、ホワイトボードにコードを書きながら説明を行っているが、 今日はEmacsを24ポイント表示にして、直接コードを入力しながらの説明を行った。 すぐにプログラムを実行した結果を見せながらだったので、ある意味便利。 しかしながら、継承の説明の前に、Joshi::print() を書いたコードを示し、 説明の順序を間違えた点で反省。

プロジェクタの説明では、エディタでスクロール移動をしすぎると、どこを見るべきか 追従できずに不満がでるだろうと、注意しながら...と思っていたが、 やっぱり画面移動が激しくなってしまった。 試験的に、プロジェクタを使ってみたけど、あまり巧い使い方ではなかったと反省。 「学生さんからは、この資料印刷して...」と頼まれたけど、 『そのまま日記にあげておく...』と説明する。

 

2015年12月

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

アーカイブ

Google

このブログ記事について

このページは、T-Saitohが2009年5月28日 10:38に書いたブログ記事です。

ひとつ前のブログ記事は「メモ:LEGO MindStorm NXT に拡張インタフェース」です。

次のブログ記事は「Google Chrome 2.0 がフリーズしやすいような...」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。