定义
-
声明为 static的类成员称为类的静态成员
-
用
static
修饰的成员变量,称之为静态成员变量; -
用
static
修饰的成员函数,称之为静态成员函数。 -
静态成员变量一定要在类外进行初始化。
下面一段代码证明 上述定义:
#include <iostream>
class MyClass {
public:
static int staticMember; // 静态成员变量
static void staticMethod() // 静态成员函数
{
std::cout << "This is a static member function." << std::endl;
}
};
int MyClass::staticMember = 0; // 在类外进行初始化
int main() {
MyClass::staticMember = 10; // 修改静态成员变量的值
std::cout << "The value of staticMember is: " << MyClass::staticMember << std::endl;
MyClass::staticMethod(); // 调用静态成员函数
return 0;
}
输出结果:
The value of staticMember is: 10
This is a static member function.
从代码可以看出,静态成员变量需要在类外进行初始化才能正常使用。静态成员函数可以通过类名直接调用,不需要实例化对象。
特性
- 静态成员 为所有类对象所共享,不属于某个具体的对象,存放在静态区 。
- 静态成员变量必须在类外定义,定义时不添加 static 关键字,类中只是声明。
- 类静态成员可用 类名::静态成员 或者 对象.静态成员 来访问。
- 静态成员函数 没有隐藏的this指针,不能访问任何非静态成员。
- 静态成员也是类的成员,受public、protected、private 访问限定符的限制。
问题
1. 静态成员函数可以调用非静态成员函数吗?
答:是的,静态成员函数可以调用非静态成员函数,但需要通过 对象实例或指针 来访问非静态成员函数。
代码举例:文章来源:https://www.toymoban.com/news/detail-628690.html
#include <iostream>
class MyClass {
public:
void nonStaticFunction() {
std::cout << "This is a non-static member function." << std::endl;
}
static void staticFunction() {
std::cout << "This is a static member function." << std::endl;
// 调用非静态成员函数
MyClass obj;
obj.nonStaticFunction();
}
};
int main() {
MyClass::staticFunction(); // 调用静态成员函数
return 0;
}
输出结果:
This is a static member function.
This is a non-static member function.
在静态成员函数 staticMethod()
中,我们实例化了一个对象 obj
,然后通过该对象调用了非静态成员函数 nonStaticMethod()
。需要注意的是,静态成员函数无法直接访问非静态成员变量,因为非静态成员变量属于对象的状态,而静态成员函数没有隐式的对象实例。如果需要访问非静态成员变量,还是需要通过对象实例或指针来访问。
2. 非静态成员函数可以调用类的静态成员函数吗
答: 是的,非静态成员函数可以调用类的静态成员函数。
代码举例:
#include <iostream>
class MyClass {
public:
static void staticFunction() {
std::cout << "This is a static member function." << std::endl;
}
void nonStaticFunction() {
std::cout << "This is a non-static member function." << std::endl;
// 调用静态成员函数
staticFuntion();
}
};
int main() {
MyClass obj;
obj.nonStaticFunction(); // 调用非静态成员函数
return 0;
}
输出结果:文章来源地址https://www.toymoban.com/news/detail-628690.html
This is a non-static member function.
This is a static member function.
到了这里,关于【C++】static 关键字的特性 与 问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!