面试题答案
一键面试- 场景一:工具类函数
- 实际场景:假设有一个数学工具类,里面包含一些与具体对象无关的数学计算函数,如计算平方根、绝对值等。这些函数不需要访问对象的成员变量,使用
static
成员函数可以方便地复用这些计算逻辑,而不需要创建类的实例。 - 代码实现思路:
- 实际场景:假设有一个数学工具类,里面包含一些与具体对象无关的数学计算函数,如计算平方根、绝对值等。这些函数不需要访问对象的成员变量,使用
class MathUtils {
public:
static double squareRoot(double num) {
return sqrt(num);
}
static double absoluteValue(double num) {
return num < 0? -num : num;
}
};
使用时可以直接通过类名调用:
double result1 = MathUtils::squareRoot(25.0);
double result2 = MathUtils::absoluteValue(-10.0);
- 场景二:管理类资源
- 实际场景:在一个数据库连接管理类中,可能需要维护当前连接的数量等全局信息。
static
成员函数可以用于管理这些资源,且不需要依赖具体的对象实例。 - 代码实现思路:
- 实际场景:在一个数据库连接管理类中,可能需要维护当前连接的数量等全局信息。
class DatabaseConnection {
private:
static int connectionCount;
public:
DatabaseConnection() {
connectionCount++;
}
~DatabaseConnection() {
connectionCount--;
}
static int getConnectionCount() {
return connectionCount;
}
};
int DatabaseConnection::connectionCount = 0;
使用时:
DatabaseConnection conn1;
DatabaseConnection conn2;
int count = DatabaseConnection::getConnectionCount();
- 场景三:单例模式
- 实际场景:当一个应用程序中需要一个全局唯一的对象来管理某些资源(如配置信息、日志记录等)时,单例模式是常用的解决方案。
static
成员函数可以用于创建和获取这个唯一的实例。 - 代码实现思路:
- 实际场景:当一个应用程序中需要一个全局唯一的对象来管理某些资源(如配置信息、日志记录等)时,单例模式是常用的解决方案。
class Singleton {
private:
static Singleton* instance;
Singleton() {}
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
public:
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
};
Singleton* Singleton::instance = nullptr;
使用时:
Singleton* singleton1 = Singleton::getInstance();
Singleton* singleton2 = Singleton::getInstance();
- 这里
getInstance
是static
成员函数,确保无论在何处调用,都返回同一个Singleton
实例,实现了代码复用以及全局资源的统一管理。