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;

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

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

  • 相关阅读:
    在上传文件时限制上传文件的大小,并捕捉超过文件大小限制的
    javascript 获取标签具体位置
    终端服务器超出了最大允许连接数
    常用SQL语句书写技巧
    Javascript实现截图功能(代码)
    JavaScript实现类,有多种方法。
    DBCC CHECKDB 数据库或表修复
    Lucene的例子
    控制同一exe程序打开多次
    IIS6 MMC检测到此管理单元发生一个错误,建议您关闭并重新启动mmc
  • 原文地址:https://www.cnblogs.com/sunnystone85/p/1405038.html
Copyright © 2011-2022 走看看