/****************************/ /* プラントモデル */ /* 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)