继承的静态函数能否访问重写的静态专用数据成员

Can an inherited static function access an overridden static private data member?

本文关键字:静态 专用 数据成员 重写 静态函数 继承 访问      更新时间:2023-10-16

我想知道以下内容:

静态.h:

class Base
{
    private: static const char* className;
    public:  static const char* getClass() { return className; };
};

class Sub : public Base
{
    private: const static char* className;
};

在static.cpp中:

#include "static.h"
#include <iostream>
const char* Base::className = "Base";
const char* Sub ::className = "Sub";
int main() {    std::cout << Sub::getClass(); }
// outputs "Base"

是否可以继承这样的函数并使其使用重写的数据成员?

是的,但这不是"覆盖",实际上是"隐藏"。类可以访问自己的私有成员,其数据成员在基类中使用相同名称隐藏声明。