• C++函数指针和类成员函数指针


    一、函数指针——基本形式

    char Fun(int n) { return char(n); }
    //char(*pFun)(int);
    
    void main()
    {
        char(*pFun)(int);
        pFun = Fun;
        char c = (*pFun)(83);
        cout << c;
    }

    二、函数指针——typedef形式

    char Fun(int n) { return char(n); }
    //typedef char(*PFun)(int);
    //PFun pFun;
    
    void main()
    {
        typedef char(*PFun)(int);
        PFun pFun;
        pFun = Fun;
        char c = (*pFun)(83);
        cout << c;
    }

    三、类成员函数指针

    class Base
    {
    public:
        char Fun(int n) { return char(n); }
    };
    
    //typedef char (Base::*PFun)(int);
    //PFun pFun;
    
    void main()
    {
        typedef char (Base::*PFun)(int);
        PFun pFun;
        pFun = &Base::Fun;
        Base instance;
        char c = (instance.*pFun)(83);
        cout << c;
    }

    四、类成员函数指针——类指针

    class Base
    {
    public:
        char Fun(int n) { return char(n); }
    };
    
    //typedef char (Base::*PFun)(int);
    //PFun pFun;
    
    void main()
    {
        typedef char (Base::*PFun)(int);
        PFun pFun;
        pFun = &Base::Fun;
        Base *pInstance = new Base();
        char c = (pInstance->*pFun)(83);
        delete pInstance;
        cout << c;
    }

    五、类成员函数指针——内部调用(this->*)

    class Base
    {
    public:
        char Fun(int n) { return char(n); }
        char Fun2()
        {
            char (Base::*pFun)(int);
            pFun = &Base::Fun;
            char c = (this->*pFun)(83);
            return c;
        }
    };
    
    void main()
    {
        Base instance;
        char c = instance.Fun2();
        cout << c;
    }

    六、类成员函数指针——继承调用

    class Base
    {
    public:
        char Fun(int n) { return char(n); }
    
        char Fun2(int n)
        {
            //char (Base::*pFun)(int);
            //pFun = &Base::Fun;
            typedef char (Base::*PFun)(int);
            PFun pFun = &Base::Fun;
            return Proc(n, pFun);
        }
    
        char Proc(int n, char(Base::*pFun)(int))
        {
            return (this->*pFun)(n);
        }
    };
    
    class Derive : Base
    {
    public:
        char Fun(int n) { return char(n - 1); }
    
        char Fun2(int n)
        {
            typedef char (Base::*PFun)(int);
            PFun pFun = static_cast<PFun>(&Derive::Fun);
            return Proc(n, pFun);
        }
    };
    
    void main()
    {
        Base base;
        char bc = base.Fun2(83);
        cout << bc;
    
        Derive derive;
        char dc = derive.Fun2(83);
        cout << dc;
    }

    七、类成员函数指针——虚拟函数

    class Base
    {
    public:
        void OFun() { cout << "base ordinary" << endl; }
        virtual void VFun(int i) { cout << "base virtual" << endl; }
    };
    
    class Derive : public Base
    {
    public:
        void OFun() { cout << "derive ordinary" << endl; }
        virtual void VFun(int i) { cout << "derive virtual" << endl; }
    };
    
    void main()
    {
        typedef void (Base::*BaseOFun)();
        typedef void (Derive::*DeriveOFun)();
        BaseOFun baseOFun = &Base::OFun;
        DeriveOFun deriveOFun = static_cast<DeriveOFun>(baseOFun);
    
        typedef void (Base::*BaseVFun)(int);
        typedef void (Derive::*DeriveVFun)(int);
        BaseVFun baseVFun = &Base::VFun;
        DeriveVFun deriveFVun = static_cast<DeriveVFun>(baseVFun);
    
        Base base;
        (base.*baseOFun)();
        (base.*baseVFun)(1);
    
        Derive derive;
        (derive.*deriveOFun)();
        (derive.*deriveFVun)(1);
    }
  • 相关阅读:
    powershell:clear-item
    windows-杂笔
    powershell:Clear-EventLog
    powershell:Get-ChildItem
    powershell 杂笔
    power-shell:clear-content
    powershell:checkpoint-computer
    vim-缩进设置
    powershell:move-item
    powershell:add-content
  • 原文地址:https://www.cnblogs.com/live41/p/3877737.html
Copyright © 2020-2023  润新知