该怎么去理解指向类成员函数的指针
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类的成员函数的指针
[解决办法]
[解决办法]
应该理解为"指向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