静态函数怎么用
时间: 2023-07-08 08:18:39 浏览: 41
在C++中,静态函数可以通过类名直接调用,也可以通过对象来调用。
下面是一个示例代码:
```cpp
#include <iostream>
class MyClass {
public:
static void myStaticFunc() {
std::cout << "I am a static function" << std::endl;
}
};
int main() {
// 通过类名直接调用静态函数
MyClass::myStaticFunc();
// 通过对象调用静态函数
MyClass obj;
obj.myStaticFunc(); // 这种调用方式并不是推荐的用法,而是为了演示可以这样调用而已
return 0;
}
```
上面的代码中,我们定义了一个名为 `MyClass` 的类,并在其中定义了一个静态函数 `myStaticFunc`。在 `main` 函数中,我们先通过类名直接调用 `myStaticFunc` 函数,然后通过一个对象 `obj` 来调用 `myStaticFunc` 函数。
需要注意的是,静态函数不能访问非静态成员变量,只能访问静态成员变量和其他静态函数。因此,如果你需要在静态函数中访问非静态成员变量,你需要将它们声明为静态成员变量。
相关问题
qt类内静态函数使用非静态变量
在Qt中,类内静态函数使用非静态变量的方法与普通的类内静态函数使用非静态变量的方法相同。下面是一个示例代码:
```cpp
class MyClass {
public:
MyClass();
~MyClass();
static void setNum(int num);
static int getNum();
private:
static int m_num;
};
int MyClass::m_num = 0;
MyClass::MyClass()
{
}
MyClass::~MyClass()
{
}
void MyClass::setNum(int num)
{
m_num = num;
}
int MyClass::getNum()
{
MyClass obj;
return m_num + obj.m_num;
}
```
在上面的代码中,我们定义了一个名为MyClass的类,它有一个私有的静态变量m_num,表示类的实例数量。在MyClass的静态函数setNum中,我们可以直接访问静态变量m_num,并将其设置为传入的参数值。在MyClass的静态函数getNum中,我们通过创建一个MyClass的实例obj来访问非静态变量m_num,并将静态变量m_num和非静态变量m_num的值相加后返回。
需要注意的是,在访问非静态变量时,必须通过类的实例来访问,而不能直接使用类名来访问。因此,在MyClass的静态函数getNum中,我们需要通过创建一个MyClass的实例obj来访问非静态变量m_num。
qt类内非静态函数使用静态变量
在Qt中,类内非静态函数使用静态变量的方法与普通的类内非静态函数使用静态变量的方法相同。下面是一个示例代码:
```cpp
class MyClass {
public:
MyClass();
~MyClass();
void setNum(int num);
int getNum();
private:
static int m_num;
};
int MyClass::m_num = 0;
MyClass::MyClass()
{
}
MyClass::~MyClass()
{
}
void MyClass::setNum(int num)
{
m_num = num;
}
int MyClass::getNum()
{
return m_num;
}
```
在上面的代码中,我们定义了一个名为MyClass的类,它有一个私有的静态变量m_num,表示一个全局的变量。在MyClass的非静态函数setNum中,我们可以通过类名加作用域运算符来访问静态变量m_num,并将其设置为传入的参数值。在MyClass的非静态函数getNum中,同样可以通过类名加作用域运算符来访问静态变量m_num,并将其返回。
使用该类的示例代码如下:
```cpp
MyClass obj1;
MyClass obj2;
obj1.setNum(10);
qDebug() << "obj1 num:" << obj1.getNum();
qDebug() << "obj2 num:" << obj2.getNum();
```
在上面的代码中,我们创建了两个MyClass的实例,然后通过obj1的setNum函数将静态变量m_num设置为10。接着我们通过obj1和obj2的getNum函数分别获取静态变量m_num的值,可以看到它们都是10。
需要注意的是,静态变量是类的所有实例共享的,因此如果通过一个实例的非静态函数来修改静态变量的值,那么该静态变量的值将会被所有实例共享。