首页 > 试题广场 >

已知fun(int)是类Test的公有成员函数,p是指向成员

[单选题]
已知fun(int)是类Test的公有成员函数,p是指向成员函数fun()的指针,采用( )是正确的。
  • p=fun
  • p=Test::fun()
  • p=fun()
  • p=&Test::fun
所有的函数若加上(),则表示调用,不加()表示该函数本身
发表于 2017-07-25 22:46:10 回复(3)
对成员函数指针的调用
    指向公有非静态的成员函数,调用时必须创建一个对象。
class Container{
    public:
    void print(){
        printf("printf()");
    }
};

int main()
{
    void (Container::*p)();             //指明是指向成员函数的指针
    p = &Container::print;
    Container c;
    (c.*p)();
    return 0;
}

指向静态函数
class Container{
    public:
    static void print(){
        printf("printf()");
    }
};
int main()
{
    void (*p)();
    p = &Container::print;
    p();
    return 0;
}

发表于 2015-09-06 15:22:01 回复(0)
p = &Test::fun;这个答案才对吧。
发表于 2015-09-22 13:13:30 回复(4)
p=Test::fun()加上括号就是调用了
发表于 2015-09-06 14:24:22 回复(2)
class MyClass {
public:
	MyClass(int i = 0) { cout << 1; }
	MyClass(const MyClass&x) { cout << 2; }
	MyClass& operator=(const MyClass&x) { cout << 3; return*this; }
	~MyClass() { delete this; }
	void fun(int) {}
};
int main(void)
{
	{
		void (MyClass::*function)(int);
		function = MyClass::fun;
	}
	system("pause");
	return 0;
}
至此完成类内部成员函数的函数指针声明,学习到了。
发表于 2015-09-05 15:17:28 回复(2)
答案B是对成员函数的调用,p是函数的返回值。答案C是对一般函数的调用,同样p是返回值。此题选D。对成员函数取地址需要作用域和取地址符
发表于 2017-08-04 09:00:37 回复(1)
函数指针使用的时候,加&与不加效果完全相同。但是注意不能出现(),有()表示函数调用,只有函数名称才表示函数的地址
发表于 2022-03-15 16:13:24 回复(0)
p=&Test::fun 和 p=Test::fun都是正确的。
发表于 2017-01-27 12:22:55 回复(1)
B选项为执行该函数;
根据函数名即为函数地址,D选项可以是下面这样吧?
p=Test::fun
发表于 2022-02-15 14:29:50 回复(0)

所有的函数若加上(),则表示调用,不加()表示该函数本身



编辑于 2018-12-18 00:16:14 回复(0)
primer第221页,应该是俩种方式。Test::fun 或者&Test::fun
发表于 2018-08-31 10:55:02 回复(0)
有括号函数调用 函数名取地址和不取地址都表示地址
编辑于 2018-08-03 11:27:20 回复(0)
fun()函数本身不就是一个地址吗???求解释不懂
发表于 2017-03-23 22:12:39 回复(1)
对成员函数指针的调用
    指向公有非静态的成员函数,调用时必须创建一个对象。
class Container{
    public:
    void print(){
        printf("printf()");
    }
};

int main()
{
    void (Container::*p)();             //指明是指向成员函数的指针
    p = &Container::print;
    Container c;
    (c.*p)();
    return 0;
}

指向静态函数
class Container{
    public:
    static void print(){
        printf("printf()");
    }
};
int main()
{
    void (*p)();
    p = &Container::print;
    p();
    return 0;
}

感谢@revivedSuN
发表于 2017-03-22 22:11:26 回复(0)
函数名相当于函数的地址。
发表于 2016-05-24 21:30:39 回复(0)
我明明做的java题,怎么觉得这是c++题
发表于 2019-09-06 18:48:52 回复(0)
不加&可以,加括号不行。
发表于 2017-10-26 14:25:04 回复(0)
fun的函数名代表的是函数的首地址,用首地址赋值给指针变量是对的,所以D对.
如果像B那样的话,是缺少实参的函数调用.
发表于 2017-09-04 11:09:27 回复(0)
为什么要加&
发表于 2017-07-10 12:01:10 回复(1)