一、静态成员函数
C++中的静态成员函数是指在类内,由关键字static
修饰的函数。它不属于任何一个对象,而是属于类本身,可以通过类名进行调用,也可以通过对象名进行调用。静态成员函数只能访问静态成员变量和静态成员函数,不能访问普通成员变量和普通成员函数。静态成员函数也不需要通过对象来调用,所以也不需要传递this
指针。下面是一个静态成员函数的例子:
class MyClass { private: static int m_num; public: static void setNum(int num) { m_num = num; } };
在这个例子中,setNum
是一个静态成员函数,它可以通过MyClass::setNum()
或obj.setNum()
来进行调用。
二、this指针
this
指针是C++中的一个关键字,它指向当前对象的指针。在成员函数中使用this
可以访问成员变量和成员函数,也可以用于返回对象本身,例如:
class MyClass { private: int m_num; public: MyClass(int num) { this->m_num = num; } int getNum() { return this->m_num; } MyClass& self() { return *this; } };
在这个例子中,this->m_num
表示访问成员变量m_num
,this->self()
表示返回当前对象本身,它返回一个引用。
三、静态成员函数与this指针
静态成员函数没有this
指针,因为它不属于任何一个对象。但是,静态成员函数可以接受一个指向当前类的指针作为参数来访问非静态成员变量和成员函数。这个指针可以是当前类的一个对象的指针,也可以是当前类的类名。下面是一个例子:
class MyClass { private: int m_num; public: static void setNum(MyClass* obj, int num) { obj->m_num = num; } int getNum() { return this->m_num; } }; // 调用静态成员函数setNum MyClass obj(10); MyClass::setNum(&obj, 20); cout << obj.getNum(); // 输出:20
在这个例子中,setNum
是一个静态成员函数,它接受一个指向MyClass
类的指针作为参数,可以访问非静态成员变量m_num
,然后改变其值。
四、总结
C++中的静态成员函数不属于任何一个对象,可以通过类名或对象名调用,不能访问非静态成员变量和成员函数。this
指针指向当前对象,可以在成员函数中访问成员变量和成员函数,也可以用于返回对象本身。静态成员函数可以接受一个指向当前类的指针作为参数来访问非静态成员变量和成员函数。