通过UE4源码学C++语法(一):类静态成员函数和类静态成员变量
在为项目配置好Steam为OnlineSubsystem后,需要获取OnlineSubsystem使用的语句如下:
IOnlineSubsystem* OnLineSubsystem = IOnlineSubsystem::Get();
IOnlineSubsystem以I开头,因此是一个抽象类,所以无法实例化对象。这里之所以能通过类直接调用函数Get(),就是因为将其设置为Static类静态成员函数;
同时在Get()函数中,又有一个变量为:
static const FName OnlineSubsystemModuleName = TEXT("OnlineSubsystem");
此为类静态变量。要与静态成员变量区别开来,不过它们俩的共同点就是都存储在全局区。
在OnlineSubsystem.h中Get()的定义如下:
public:
virtual ~IOnlineSubsystem() {}
/**
* Get the online subsystem for a given service //获取给定服务的联机子系统
* @param SubsystemName - Name of the requested online service
* @return pointer to the appropriate online subsystem
*/
static IOnlineSubsystem* Get(const FName& SubsystemName = NAME_None)
{
static const FName OnlineSubsystemModuleName = TEXT("OnlineSubsystem");
FOnlineSubsystemModule& OSSModule = FModuleManager::GetModuleChecked<FOnlineSubsystemModule>(OnlineSubsystemModuleName);
return OSSModule.GetOnlineSubsystem(SubsystemName);
}
类静态成员函数和类成员函数的区别在于:
①类静态成员函数在编译器编译时不会添加this指针,因为类静态成员函数是属于整个类,而不是某个特定的对象,所以不需要传入this指针。
②正是因为类静态成员没有this指针,所以无法确定具体的对象,因此也只能访问同样是整个类所属的静态成员变量或静态成员函数。
③正如上面举的例子,类静态成员函数可以通过类名直接访问,但要注意前提是该类静态成员函数是public的;
④类静态成员函数也是可以通过对象名直接访问,前提也同样是类静态成员函数必须是public的。
类静态成员变量和类成员变量的区别在于:
①类静态成员变量属于整个类,其生命周期不依赖于某一个对象;
②能通过类名和对象名直接访问类静态成员变量,前提是类静态成员变量必须是public的 ;
③必须在类外区域进行赋值,即进行分配内存,其存储区域在全局区。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理