いろいろなテクニック.Nucleo と DISCO-F746 用.
Dependencies: Array_Matrix mbed
FunctionPointerInClass.hpp@0:bb939e0bc6e2, 2017-10-15 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Sun Oct 15 11:41:48 2017 +0000
- Revision:
- 0:bb939e0bc6e2
1
Who changed what in which revision?
User | Revision | Line number | New 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 | } |