プラントモデル

  C/C++ の場合,クラスのオブジェクトを参照渡しで渡しています.

/****************************/
/* プラントモデル           */
/*      coded by Y.Suganuma */
/****************************/
#include <stdio.h>

/********************/
/* クラスFeedの定義 */
/********************/
class Feed {         /* 原料の供給 */
	public:
		double x, y, z;
						  // コンストラクタ
		Feed(double x, double y, double z)
		{
			this->x = x;
			this->y = y;
			this->z = z;
		}
						  // 出力
		void print()
		{
			printf("x %f y %f z %f (feed)\n", x, y, z);
		}
};

/*******************/
/* クラスAddの定義 */
/*******************/
class Add {		  /* 混合 */
	public:
		double x, y, z;
						  // コンストラクタ
		Add(Feed &a, Feed &b)
		{
			x = a.x + b.x;
			y = a.y + b.y;
			z = a.z + b.z;
		}
						  // 出力
		void print()
		{
			printf("x %f y %f z %f (add)\n", x, y, z);
		}
};

/***********************/
/* クラスProductの定義 */
/***********************/
class Product {	  /* 製品 */
	public:
		double x, y, z;
						  // コンストラクタ
		Product(Add &a)
		{
			x = 0.1 * a.x;
			y = 0.2 * a.y;
			z = 0.9 * a.x + 0.8 * a.y;
		}
						  // 出力
		void print()
		{
			printf("x %f y %f z %f (product)\n", x, y, z);
		}
};

/************/
/* main関数 */
/************/
int main()
{
	Feed feed1(10.0, 20.0, 0.0);
	feed1.print();

	Feed feed2(5.0, 10.0, 0.0);
	feed2.print();

	Add add1(feed1, feed2);
	add1.print();

	Product pro1(add1);
	pro1.print();

	return 0;
}
		

  このプログラムの実行により,以下のような結果が得られます.
x 10.000000 y 20.000000 z 0.000000 (feed)
x 5.000000 y 10.000000 z 0.000000 (feed)
x 15.000000 y 30.000000 z 0.000000 (add)
x 1.500000 y 6.000000 z 37.500000 (product)