什么是非静态成员函数?

What is a nonstatic member function?

本文关键字:函数 静态成员 是非 什么      更新时间:2023-10-16

我被告知不能在类函数中使用'this'关键字。我是从c#来的,我习惯了这种工作方式,但是编译器告诉我它只能在非静态成员函数中使用。

D3DXVECTOR3 position;
void Position(D3DXVECTOR3 position)
{
    this.position = position;
}

这是一个指针,包含对象的地址。

D3DXVECTOR3 position;
void YourClassNameHere::Position(D3DXVECTOR3 position)
{
    this->position = position;
}

D3DXVECTOR3 position;
void YourClassNameHere::Position(D3DXVECTOR3 position)
{
    (*this).position = position;
}

在c++中,您需要用类名限定Position函数:

void YourClassNameHere::Position(D3DXVECTOR3 position)

也来自@Pubby8的答案this是一个指针,而不是一个引用,所以你需要使用this->position代替(或考虑使用不阴影类成员的参数名称-我喜欢在我的类成员上使用尾随_)。

此外,c++默认不通过引用传递,所以如果D3DXVECTOR3是一个复杂的类型,你将复制大量的数据。考虑将其作为const D3DXVECTOR3& position传递。

不仅像您写的那样,Position是一个自由函数(不与类关联),而且this也是一个指针,而不是引用。

D3DXVECTOR3 position;
void ClassName::Position(D3DXVECTOR3 position)
{
    this->position = position;
}

或者,如果是构造函数,

ClassName::ClassName(D3DXVECTOR3 p) : position(p)
{
}