いろいろなテクニック.Nucleo と DISCO-F746 用.

Dependencies:   Array_Matrix mbed

Committer:
MikamiUitOpen
Date:
Wed Apr 10 06:32:33 2019 +0000
Revision:
1:bbb9f0c3e523
Parent:
0:bb939e0bc6e2
2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:bb939e0bc6e2 1 //------------------------------------------------------------
MikamiUitOpen 0:bb939e0bc6e2 2 // 実行時ポリモーフィズムの例
MikamiUitOpen 0:bb939e0bc6e2 3 //
MikamiUitOpen 0:bb939e0bc6e2 4 // 2016/04/12, Copyright (c) 2016 MIKAMI, Naoki
MikamiUitOpen 0:bb939e0bc6e2 5 //------------------------------------------------------------
MikamiUitOpen 0:bb939e0bc6e2 6
MikamiUitOpen 0:bb939e0bc6e2 7 #include "mbed.h"
MikamiUitOpen 0:bb939e0bc6e2 8
MikamiUitOpen 0:bb939e0bc6e2 9 class Base
MikamiUitOpen 0:bb939e0bc6e2 10 {
MikamiUitOpen 0:bb939e0bc6e2 11 public:
MikamiUitOpen 0:bb939e0bc6e2 12 Base() {}
MikamiUitOpen 1:bbb9f0c3e523 13 virtual void Execute() { printf(" Base class\r\n"); }
MikamiUitOpen 0:bb939e0bc6e2 14 };
MikamiUitOpen 0:bb939e0bc6e2 15
MikamiUitOpen 0:bb939e0bc6e2 16 class Derived1 : public Base
MikamiUitOpen 0:bb939e0bc6e2 17 {
MikamiUitOpen 0:bb939e0bc6e2 18 public:
MikamiUitOpen 0:bb939e0bc6e2 19 Derived1() {}
MikamiUitOpen 1:bbb9f0c3e523 20 virtual void Execute() { printf(" Derived1 class\r\n"); }
MikamiUitOpen 0:bb939e0bc6e2 21 };
MikamiUitOpen 0:bb939e0bc6e2 22
MikamiUitOpen 0:bb939e0bc6e2 23 class Derived2 : public Base
MikamiUitOpen 0:bb939e0bc6e2 24 {
MikamiUitOpen 0:bb939e0bc6e2 25 public:
MikamiUitOpen 0:bb939e0bc6e2 26 Derived2() {}
MikamiUitOpen 1:bbb9f0c3e523 27 virtual void Execute() { printf(" Derived2 class\r\n"); }
MikamiUitOpen 0:bb939e0bc6e2 28 };
MikamiUitOpen 0:bb939e0bc6e2 29
MikamiUitOpen 0:bb939e0bc6e2 30 void Print(Base *obj) { obj->Execute(); }
MikamiUitOpen 0:bb939e0bc6e2 31
MikamiUitOpen 0:bb939e0bc6e2 32 void MyPolyMorphism()
MikamiUitOpen 0:bb939e0bc6e2 33 {
MikamiUitOpen 0:bb939e0bc6e2 34 Base base;
MikamiUitOpen 0:bb939e0bc6e2 35 Derived1 drv1;
MikamiUitOpen 0:bb939e0bc6e2 36 Derived2 drv2;
MikamiUitOpen 0:bb939e0bc6e2 37
MikamiUitOpen 0:bb939e0bc6e2 38 // 例 1
MikamiUitOpen 1:bbb9f0c3e523 39 printf("例 1:\r\n");
MikamiUitOpen 0:bb939e0bc6e2 40 Base *func[3] = { &base, &drv1, &drv2 };
MikamiUitOpen 0:bb939e0bc6e2 41 for (int n=0; n<3; n++) func[n]->Execute();
MikamiUitOpen 0:bb939e0bc6e2 42
MikamiUitOpen 0:bb939e0bc6e2 43 // 例 2
MikamiUitOpen 1:bbb9f0c3e523 44 printf("例 2:\r\n");
MikamiUitOpen 0:bb939e0bc6e2 45 Base *ptr;
MikamiUitOpen 0:bb939e0bc6e2 46 ptr = &drv2;
MikamiUitOpen 0:bb939e0bc6e2 47 ptr->Execute();
MikamiUitOpen 0:bb939e0bc6e2 48
MikamiUitOpen 0:bb939e0bc6e2 49 ptr = &drv1;
MikamiUitOpen 0:bb939e0bc6e2 50 ptr->Execute();
MikamiUitOpen 0:bb939e0bc6e2 51
MikamiUitOpen 0:bb939e0bc6e2 52 // 例 3
MikamiUitOpen 1:bbb9f0c3e523 53 printf("例 3:\r\n");
MikamiUitOpen 0:bb939e0bc6e2 54 Print(&drv2);
MikamiUitOpen 0:bb939e0bc6e2 55 }