C++中静态成员函数和普通成员函数存储方式相同

时间:2022-02-22 19:49:08

先从一个示例查看类的创建过程中,静态成员函数和普通成员函数的存储区别。

 #include "stdafx.h"
#include<iostream>
#include<string.h> using namespace std; class Test
{
public:
static int a;
void func1()
{
cout << "类的地址:" <<this << endl;
};
static void func2()
{
};
};
int Test::a=; int main() {
printf( "普通成员函数的地址:%X\n", &Test::func1);
printf( "静态成员函数的地址:%X\n", &Test::func2);
Test test;
Test test2;
test.func1();
cout << "静态成员变量a的地址:" << &(test.a)<<endl;
printf( "%X\n", &Test::func1);
cout << &test.func2 << endl;
cout << &test2.func2 << endl;
system("pause");
return ;
}

运行结果:

C++中静态成员函数和普通成员函数存储方式相同

可以看出类在定义后就会给成员函数(包括静态和动态)分配”存储空间“,当然静态成员变量也会分配。在初始化对象时,这个地址也不会再改变了。

对应为什么需要使用:printf( "普通成员函数的地址:%X\n", &Test::func1); 获取静态函数的地址,可以参考:https://blog.csdn.net/zzhays/article/details/8036098