フレームの表現

/****************************/
/* 継承(フレームの表現)   */
/*      coded by Y.Suganuma */
/****************************/
#include <stdio.h>

/**********************/
/* クラスAnimalの定義 */
/**********************/
class Animal {				  /* 動物フレーム */
	protected:
		int ani;                       // 生物:0,その他:1
		int ox;                        // 酸素呼吸:0,その他:1
	public:
		Animal(int k1, int k2)         // コンストラクタ
		{
			ani = k1;
			ox  = k2;
		}
		void shu(int sw)              // 生物か否かに答える
		{
			if (ani == sw)
				printf("yes\n");
			else
				printf("no\n");
		}
};

/*********************/
/* クラスHumanの定義 */
/*********************/
class Human : public Animal {   /* 人間フレーム,クラスAnimalを継承 */
	protected:
		int height;                    // 身長
		double weight;                 // 体重
	public:
		Human(int x, int y) : Animal(x, y) {}      // コンストラクタ
		void taiju()                   // 体重を返す関数
		{
			printf("体重は %f Kgです\n", weight);
		}
};

/********************/
/* クラスTaroの定義 */
/********************/
class Taro : public Human {     /* 太郎フレーム,クラスHumanを継承 */
	public:
		Taro(int hei = 0, double wei = 0.0) : Human(0, 0)   // コンストラクタ
		{
			height = (hei == 0) ? 170 : hei;
			weight = (wei == 0.0) ? 0.9 * (height - 100) : wei;
		}
};

/************/
/* main関数 */
/************/
int main()
{
	Human h1(0, 0);
	Taro t1(175);

	h1.shu(1);    // 人間は生物ではない?
	t1.shu(0);    // 太郎は生物?
	t1.taiju();   // 太郎の体重は?

	return 0;
}
		

  このプログラムを実行すると,以下のような結果が得られます.例えば,太郎が生物か否かの問に対して,太郎自身の知識には,何ら記述してありませんが,上位概念(この場合は,クラス Animal )の知識(メンバー変数 ani とメンバー関数 shu )を継承して,正しい答えをだしています.
no
yes
体重は 67.500000 Kgです