通过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的 ;
    ③必须在类外区域进行赋值,即进行分配内存,其存储区域在全局区。

 

posted @   ShaunSheehan  阅读(614)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示