ホーム » スタッフ » 斉藤徹 » 派生クラスの説明

2009年5月
« 4月   6月 »
 12
3456789
10111213141516
17181920212223
24252627282930
31  

最近の投稿(電子情報)

アーカイブ

カテゴリー

派生クラスの説明

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

// 基本となるクラス
//        ⇒ "基底クラス" ("親クラス"と呼ぶ場合もある)
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() を書いたコードを示し、 説明の順序を間違えた点で反省。

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