下列程序的运行结果是0.请为横线处选择合适的程序()
#include <iostream>
#include <cmath>
using namespace std;
class Base {
public:Base(int X = 0);Base(Base &p);static void GetC(Base a1, Base a2) {cout << a2.X - a1.X;}
private:int X;
};
Base::Base(int XX) {X = XX;
}
Base::Base(Base &p) {X = p.X;
}
int main() {Base a1(5);Base a2(a1);__________ = Base::GetC;(*q)(a1, a2);return 0;
}
C++指向函数的指针定义方式为:
返回类型 (*指针名) (函数参数列表) ,例如 void (*p)(int)是指向一个返回值为void 参数为int类型的函数
对于指向成员函数的指针略有不同:
1.指向非静态成员函数:
定义方式:返回类型 (类名::*指针名)(函数参数列表)例如void (A::*p)(int)是一个指向A类中成员函数的函数指针。
赋值方式:p=&A::函数名,而一般的函数指针的赋值是p=函数名即可,注意区别。(成员函数必须是public类型的)
调用方式:成员函数指针的调用必须通过类对象进行调用,a.*p(int)即可调用成员函数(该成员函数是public类型的)
1.静态成员函数
对于静态成员函数的定义和使用方法都与普通函数指针的相同,只是在赋值的时候和非静态成员们函数指针的赋值方法相同。
因为静态成员函数的指针类型是与普通函数指针类型相同的。
静态与普通变量即函数的区别就是在声明部分有无类名,即:
普通成员变量:返回类型 (类名::*指针名)=
静态成员变量:返回类型 (*指针名)=
需要注意,初始化静态成员变量要在类外初始化,不能在声明时直接赋值。
并且,调用静态成员变量的时候,不需要加对象名,直接*指针,
另外,因为优先级的原因,调用成员函数指针的时候括号不能少。
因此,选项A为指向非静态成员函数时的写法;B、C格式错误;D为指向静态成员函数时的写法