首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-04-12 
该怎么去理解指向类成员函数的指针class BB{public:void print(){}}void main(){void(BB::*p)(void) (&

该怎么去理解指向类成员函数的指针
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

热点排行