读书人

该如何去理解指向类成员函数的指针

发布时间: 2012-04-12 15:46:35 作者: rapoo

该怎么去理解指向类成员函数的指针
class BB
{
public:
void print()
{

}
};

void main()
{
void(BB::*p)(void) = (&BB::print);//这里 不是只有静态函数才能以“类名::函数名”的方式去访问吗 为什么普通的成员函数也可以?
}

还有void(BB::*p)(void)这个理解成指向BB类型中的成员函数的指针?还是理解成指向BB作用域中的函数指针?

[解决办法]
void(BB::*p)(void)理解成指向BB类型中的成员函数的指针


不是只有静态函数才能以“类名::函数名”的方式去访问吗 为什么普通的成员函数也可以?


不是
例:
BB b;
b.BB::print();//b.print()是简写.只有在调用时才须要一个对象来调用,所以BB::print()不合法。但是BB::print合法。(没有调用)
[解决办法]
我的理解是p是BB类的成员函数的指针
[解决办法]

探讨
void(BB::*p)(void)理解成指向BB类型中的成员函数的指针


不是只有静态函数才能以“类名::函数名”的方式去访问吗 为什么普通的成员函数也可以?


不是
例:
BB b;
b.BB::print();//b.print()是简写.只有在调用时才须要一个对象来调用,所以BB::print()不合法。但是BB::print合法。(没有调用)

[解决办法]
应该理解为"指向BB类型中的成员函数的指针"
[解决办法]
表示类型时候和调用时候是不一样的,类成员确实只有静态类成员才可以通过类名加与作用符调用,但当时的情况是在说明函数是类的成员,并没有调用函数~
[解决办法]
一般是这样用的

C/C++ code
#include "stdafx.h"#include <stdio.h>class BB{public:void print(){    printf("BB print");}};void main(){    void(BB::*p)(void) = (&BB::print);//这里 不是只有静态函数才能以“类名::函数名”的方式去访问吗 为什么普通的成员函数也可以?    BB* pObject = new BB();    (pObject->*p)();}
[解决办法]
http://blog.csdn.net/sunnyorange/article/details/6672383

读书人网 >C++

热点推荐