面试题答案
一键面试原理
- 静态成员变量:
- 静态成员变量属于类,而不是类的某个对象。它在程序运行期间只有一份实例,存储在全局数据区,所有对象共享这份数据。这使得不同对象可以通过访问这个共同的静态成员变量来实现数据共享。
- 例如,假设有一个类
Student
,如果有一个静态成员变量totalStudents
用于记录学生总数,无论创建多少个Student
对象,totalStudents
都只有一个实例,所有Student
对象都能对其进行访问和修改,从而实现数据共享。
- 静态成员函数:
- 静态成员函数也属于类,它不依赖于任何对象实例,可以直接通过类名来调用。静态成员函数只能访问静态成员变量和其他静态成员函数,因为它没有
this
指针(this
指针指向对象实例,而静态成员函数不依赖于对象实例)。这保证了静态成员函数在访问共享数据(静态成员变量)时的一致性和安全性,进而实现对象间通过静态成员函数对共享数据(静态成员变量)的操作,达到数据共享的目的。
- 静态成员函数也属于类,它不依赖于任何对象实例,可以直接通过类名来调用。静态成员函数只能访问静态成员变量和其他静态成员函数,因为它没有
具体方式
- 静态成员变量:
- 在类的定义中声明静态成员变量,例如
static int sharedVariable;
。 - 在类外进行初始化,如
int ClassName::sharedVariable = initialValue;
。 - 可以通过对象名或类名来访问,如
obj.sharedVariable
或ClassName::sharedVariable
。
- 在类的定义中声明静态成员变量,例如
- 静态成员函数:
- 在类的定义中声明静态成员函数,例如
static void sharedFunction();
。 - 在类外定义函数,如
void ClassName::sharedFunction() { /* 函数体 */ }
。 - 可以通过对象名或类名来调用,如
obj.sharedFunction()
或ClassName::sharedFunction()
。
- 在类的定义中声明静态成员函数,例如
代码示例
#include <iostream>
class Counter {
public:
// 静态成员变量声明
static int count;
// 静态成员函数声明
static void increment() {
count++;
}
static void display() {
std::cout << "Count: " << count << std::endl;
}
};
// 静态成员变量初始化
int Counter::count = 0;
int main() {
Counter obj1, obj2;
obj1.increment();
obj2.increment();
Counter::display(); // 输出: Count: 2
return 0;
}
在上述代码中,Counter
类的静态成员变量count
被所有Counter
对象共享。increment
和display
静态成员函数可以通过对象或类名调用,用于操作和显示共享的count
变量。