如何在多个空间中引用一个函数,并且不破坏封装.
实在不想送玉,只想参观的,直接跳到最后红色就可以了.
没玉可抛,想捡砖验证是土是金的同上.
在主要砖之前,我先抛另外一块砖.(qtcreater的默认编译器)
在我的印象中,每个类的成员函数虽然是相互独立的
例如 A::fun() 和 B::fun() 应该是没有一毛钱关系的
但是每个类的对象是没有必要重复实例化的
例如 a1.fun() 和 a2.fun() 应该是完全相同的
如果每个类的成员函数都只初始化一次,那么理论上编译器可以知道这个成员函数的地址.但是实际上并非如此
#include <iostream>
class A
{
public:
void static fun()
{
std::cout << "我的地址是" << (unsigned int)(fun) << std::endl ;
}
};
int main(int argc, char *argv[])
{
A::fun();
while(1);
}
#include <iostream>
using namespace std;
class A;
typedef void(A::*MyFunc)(int) ;
class A {
public:
A() {}
A(MyFunc fp): fp(fp) {}
void invoke(int a)
{
(this->*fp)(a);
}
void func1(int a) { cout << "func1 " << a << endl; }
void func2(int a) { cout << "func2 " << a << endl; }
private:
MyFunc fp;
};
int main()
{
A* a = new A( & A::func1 );
a->invoke(5);
A* b = new A( & A::func2 );
b->invoke(6);
}