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;

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

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

  • 相关阅读:
    eclipse如何设置高亮代码的背景色,比如选中某个单词,高亮所有的
    javascript弹层
    click只能点击一次
    eclipse创建文件夹河包
    maven工程如何引用css和js文件
    maven-parent的pom.xml配置
    pom.xml设置maven的编码方式
    springmvc搭建环境时报No mapping found for HTTP request with URI [/exam3/welcome] in DispatcherServlet with name 'spring2'
    sso的实现
    C#中,重新排列panel中的按钮
  • 原文地址:https://www.cnblogs.com/sunnystone85/p/1405038.html
Copyright © 2011-2022 走看看