MST

星途 面试题库

面试题:C++中static成员函数代码复用场景

请举例说明在C++中,static成员函数在哪些实际场景下可以实现代码复用,并简要描述代码实现思路。
23.4万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 场景一:工具类函数
    • 实际场景:假设有一个数学工具类,里面包含一些与具体对象无关的数学计算函数,如计算平方根、绝对值等。这些函数不需要访问对象的成员变量,使用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);
  1. 场景二:管理类资源
    • 实际场景:在一个数据库连接管理类中,可能需要维护当前连接的数量等全局信息。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();
  1. 场景三:单例模式
    • 实际场景:当一个应用程序中需要一个全局唯一的对象来管理某些资源(如配置信息、日志记录等)时,单例模式是常用的解决方案。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();
  • 这里getInstancestatic成员函数,确保无论在何处调用,都返回同一个Singleton实例,实现了代码复用以及全局资源的统一管理。