zoukankan      html  css  js  c++  java
  • 成员函数指针

      顾名思义,成员函数指针就是一个指向类的成员函数的指针,那么它与普通的函数指针有什么

    不同呢?首先他们都是指向函数的指针只不过成员函数指针指向的是成员函数。在声明的时候需要

    所属类名和(::)作用域运算符:

    void (ClassName::*pFunc) (int, int);

      还有就是在使用的时候需要通过相应类的对象来调用。

    class Mammal

    {
    public:
        Mammal():itsAge(1) { cout << "Mammal constructor..."n"; }
        virtual ~Mammal() { cout << "Mammal destructor..."n"; }
        virtual void Speak() const = 0;
        virtual void Move() const = 0;
    protected:
        int itsAge;

    };

    class Dog:public Mammal
    {
    public:
        void Speak() const { cout << "Woof!" << endl; }
        void Move() const { cout << "Walking to heel..." << endl; }

    };

    int main()
    {
        void (Mammal::*pFunc) () const = 0; // 声明一个成员函数指针

        Mammal * ptr = 0; // 类指针

        ptr = new Dog; // 实例化一个类

        pFunc = Mammal::Speak; // 把Speak()函数的函数指针赋给pFunc

       (ptr->*pFunc)(); // 调用这个成员函数指针

        delete ptr; 

        return 0;

    }

         上面 pFunc = Mammal::Speak;这句话不同的编译器编译结果不同,有的编译器能通过vc6,有的要报错vs2005

    这个原因我想可能是编译器的编译机制导致的。在编译报错的编译器要这样写:

               pFunc = &Mammal::Speak;

         前面加上一个&运算符,可能在编译前编译器不知道这个到底是个成员函数还是成员变量,所以要告诉编译器这是一

    个函数指针,而不成员变量。

  • 相关阅读:
    微服务化之无状态化与容器化
    微服务化的不同阶段 Kubernetes 的不同玩法
    网易大数据技术沙龙
    十年•杭研技术秀 | “网易云存储服务”从0到1发展之路
    传统业务上云:跨AZ容灾架构解析
    kubernetes1.9管中窥豹-CRD概念、使用场景及实例
    浅谈 kubernetes service 那些事 (下篇)
    浅谈 kubernetes service 那些事(上篇)
    Docker容器的原理与实践(上)
    Docker容器的原理与实践 (下)
  • 原文地址:https://www.cnblogs.com/sunnystone85/p/1405038.html
Copyright © 2011-2022 走看看