程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 利用C++重載實現類似“類成員指針”的功能

利用C++重載實現類似“類成員指針”的功能

編輯:C++入門知識

 

代碼如下:

 

//: PointerToMemberOperator.cpp 

#include <iostream> 

using namespace std; 

 

class Dog 

public: 

    int run(int i) const  

    {  

        cout << "run\n";   

        return i;  

    } 

    int eat(int i) const  

    {  

        cout << "eat\n";   

        return i;  

    } 

    int sleep(int i) const  

    {  

        cout << "ZZZ\n";  

        return i;  

    } 

    typedef int (Dog::*PMF)(int) const; 

    // operator->* must return an object  

    // that has an operator(): 

    class FunctionObject 

    { 

        Dog* ptr; 

        PMF pmem; 

    public: 

        // Save the object pointer and member pointer 

        FunctionObject(Dog* wp, PMF pmf)  

            : ptr(wp), pmem(pmf)  

        {  

            cout << "FunctionObject constructor\n"; 

        } 

        // Make the call using the object pointer 

        // and member pointer 

        int operator()(int i) const 

        { 

            cout << "FunctionObject::operator()\n"; 

            return (ptr->*pmem)(i); // Make the call 

        } 

    }; 

    FunctionObject operator->*(PMF pmf)  

    {  

        cout << "operator->*" << endl; 

        return FunctionObject(this, pmf); 

    } 

}; 

 

int main() { 

    Dog w; 

    Dog::PMF pmf = &Dog::run; 

    cout << (w->*pmf)(1) << endl; 

    pmf = &Dog::sleep; 

    cout << (w->*pmf)(2) << endl; 

    pmf = &Dog::eat; 

    cout << (w->*pmf)(3) << endl; 

 

 

摘自yucan1001  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved