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;

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

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

  • 相关阅读:
    堆排序优化与几个排序算法时间复杂度
    冒泡排序的实现和优化及其与插入,选择排序的比较
    插入排序的实现与优化并和选择排序进行性能比较
    选择排序的实现以及性能测试
    MD5加密
    低功耗蓝牙BLE [学习笔记]
    反编译[学习笔记]
    Android 混淆[学习笔记]
    北大SQL数据库视频课程笔记
    repo/git Android/CyanogenMod srouce code
  • 原文地址:https://www.cnblogs.com/sunnystone85/p/1405038.html
Copyright © 2011-2022 走看看