面试题答案
一键面试实现代码复用方式
在派生类中,可以直接通过类名或者对象来调用基类的 static
成员函数,实现代码复用。因为 static
成员函数属于类,而非类的对象,不受继承关系中对象多态性的影响。
代码示例
#include <iostream>
class Base {
public:
static void staticFunction() {
std::cout << "This is a static function in Base class." << std::endl;
}
};
class Derived : public Base {
public:
void callBaseStaticFunction() {
// 通过类名调用
Base::staticFunction();
// 也可以通过对象调用
Derived d;
d.staticFunction();
}
};
int main() {
Derived d;
d.callBaseStaticFunction();
return 0;
}
注意事项
- 作用域问题:调用时最好使用类名限定作用域,明确调用的是基类的
static
成员函数,避免与派生类中可能存在的同名函数混淆。例如Base::staticFunction()
。 - 多态性:
static
成员函数不具有多态性,不会根据对象的实际类型(基类或派生类)来调用不同版本。无论通过基类对象还是派生类对象调用,都是调用定义在类中的static
函数版本。 - 访问权限:基类
static
成员函数的访问权限在继承时遵循一般的继承访问规则。如果基类static
函数是private
,派生类无法直接调用;如果是protected
,派生类内部可以调用;如果是public
,派生类内部和外部都可以调用。