先从一个示例查看类的创建过程中,静态成员函数和普通成员函数的存储区别。
1 #include "stdafx.h" 2 #include<iostream> 3 #include<string.h> 4 5 using namespace std; 6 7 class Test 8 { 9 public: 10 static int a; 11 void func1() 12 { 13 cout << "类的地址:" <<this << endl; 14 }; 15 static void func2() 16 { 17 }; 18 }; 19 int Test::a=1; 20 21 int main() { 22 printf( "普通成员函数的地址:%X ", &Test::func1); 23 printf( "静态成员函数的地址:%X ", &Test::func2); 24 Test test; 25 Test test2; 26 test.func1(); 27 cout << "静态成员变量a的地址:" << &(test.a)<<endl; 28 printf( "%X ", &Test::func1); 29 cout << &test.func2 << endl; 30 cout << &test2.func2 << endl; 31 system("pause"); 32 return 0; 33 }
运行结果:
可以看出类在定义后就会给成员函数(包括静态和动态)分配”存储空间“,当然静态成员变量也会分配。在初始化对象时,这个地址也不会再改变了。
对应为什么需要使用:printf( "普通成员函数的地址:%X ", &Test::func1); 获取静态函数的地址,可以参考:https://blog.csdn.net/zzhays/article/details/8036098