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

Dependencies:   Array_Matrix mbed

Committer:
MikamiUitOpen
Date:
Sun Oct 15 11:41:48 2017 +0000
Revision:
0:bb939e0bc6e2
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:bb939e0bc6e2 1 //------------------------------------------------
MikamiUitOpen 0:bb939e0bc6e2 2 // クラス内で関数ポインタを使う
MikamiUitOpen 0:bb939e0bc6e2 3 // 2016/07/22, Copyright (c) 2016 MIKAMI, Naoki
MikamiUitOpen 0:bb939e0bc6e2 4 //------------------------------------------------
MikamiUitOpen 0:bb939e0bc6e2 5
MikamiUitOpen 0:bb939e0bc6e2 6 class MyClass
MikamiUitOpen 0:bb939e0bc6e2 7 {
MikamiUitOpen 0:bb939e0bc6e2 8 public:
MikamiUitOpen 0:bb939e0bc6e2 9 MyClass(int k) // 実行する処理を,コンストラクタの引数 k で変える
MikamiUitOpen 0:bb939e0bc6e2 10 {
MikamiUitOpen 0:bb939e0bc6e2 11 if (k==0) fp = &MyClass::GetA; // 関数ポインタに GetA() を割り当てる
MikamiUitOpen 0:bb939e0bc6e2 12 else fp = &MyClass::GetB; // 関数ポインタに GetB() を割り当てる
MikamiUitOpen 0:bb939e0bc6e2 13 }
MikamiUitOpen 0:bb939e0bc6e2 14 void Exec(int &x) { (this->*fp)(x); }
MikamiUitOpen 0:bb939e0bc6e2 15 private:
MikamiUitOpen 0:bb939e0bc6e2 16 void (MyClass::*fp)(int&); // 関数ポインタ
MikamiUitOpen 0:bb939e0bc6e2 17
MikamiUitOpen 0:bb939e0bc6e2 18 // 以下の関数を関数ポインタに割り当てる
MikamiUitOpen 0:bb939e0bc6e2 19 void GetA(int& a) { a = 2; }
MikamiUitOpen 0:bb939e0bc6e2 20 void GetB(int& a) { a = 5; }
MikamiUitOpen 0:bb939e0bc6e2 21 };
MikamiUitOpen 0:bb939e0bc6e2 22
MikamiUitOpen 0:bb939e0bc6e2 23 void MyFunctionPointerClass()
MikamiUitOpen 0:bb939e0bc6e2 24 {
MikamiUitOpen 0:bb939e0bc6e2 25 MyClass objA(0);
MikamiUitOpen 0:bb939e0bc6e2 26 MyClass objB(1);
MikamiUitOpen 0:bb939e0bc6e2 27
MikamiUitOpen 0:bb939e0bc6e2 28 int x;
MikamiUitOpen 0:bb939e0bc6e2 29 objA.Exec(x); // GetA() が実行される
MikamiUitOpen 0:bb939e0bc6e2 30 printf("a = %d\r\n", x);
MikamiUitOpen 0:bb939e0bc6e2 31 objB.Exec(x); // GetB() が実行される
MikamiUitOpen 0:bb939e0bc6e2 32 printf("a = %d\r\n", x);
MikamiUitOpen 0:bb939e0bc6e2 33 }