使用类成员函数指针需要掌握的三点。
1) 申明类成员函数指针:::*
2) 通过对象指针调用类函数指针:->*
3) 通过对象调用类函数指针:.*例:
- /** 定义基类和子类 **/
- class Base {
- public:
- virtual void print1() {
- std::cout << "Base::print1()" << std::endl;
- }
-
-
- virtual void print2() {
- std::cout << "Base::print2()" << std::endl;
- }
- };
-
-
- class Derived : public Base {
- public:
- virtual void print1() {
- std::cout << "Derived::print1()" << std::endl;
- }
-
-
- virtual void print2() {
- std::cout << "Derived::print2()" << std::endl;
- }
- };
-
-
- /** 申明类成员函数指针类型 **/
- typedef void (Base::*fn)();
-
-
- /** 通过对象指针调用类函数指针 **/
- void test1(Base* obj, fn func) {
- (obj->*func)();
- }
-
-
- /** 通过对象调用类函数指针 **/
- void test2(Base& obj, fn func) {
- (obj.*func)();
- }
-
-
- void test_function_pointer() {
- Base b;
- Derived d;
-
- test1(&b, &Base::print1);
- test1(&b, &Base::print2);
- test1(&d, &Base::print1);
- test1(&d, &Base::print2);
-
-
-
- test2(b, &Base::print2);
- test2(d, &Base::print2);
- }