我有一个类,我正在重构它,并希望添加一个辅助函数来消除静态和非静态方法中的一些代码重复,因此辅助函数必须是静态的。当我从非静态方法内部调用辅助函数时,我是否需要使用双冒号表示法,MyClass :: helper_function(x,y,z),箭头符号,this-> helper_function(x, y,z),还是只是helper_function(x,y,z)?如果辅助函数是公共的,您是否可以使用点表示法myObject.helper_function(x,y,z)从实例访问它?我会在几分钟内尝试一下,我确定我会弄清楚,但我认为这是一个很好的gedankeexperiment试图弄清楚会发生什么。 我是否应该让辅助函数根本不是该类的成员,而只是将它放在类的.cpp文件中以使其可以被类的方法访问?什么是最佳做法?
答案 0 :(得分:1)
MyClass::helper_function
- 这是一个合格的名字。首先查找类名,找到当前类,然后在类中找到静态方法。helper_function
- 这是一个不合格的名字。在尝试使用周围的范围之前,它将首先在类范围中查找。但由于helper_function
是类中的静态方法,因此无法进行进一步搜索this->helper_function
- 这是最不寻常的。 this
指针的类型为MyClass*
,因此搜索仅限于MyClass
。但是一旦找到helper_function
,事实证明this
指针实际上并不需要。这并不会使名称查找失效。 static
辅助函数可以访问其他类成员,特别是private
成员。这包括私有构造函数,私有析构函数,私有嵌套类型,常量等。如果您需要其中一个,静态方法是唯一合理的选择。
答案 1 :(得分:0)
是的,您可以通过this
指针和.
或->
表示法访问静态方法。