在 C++ 中,如果我们在某个基类(比如 Base)中有一些虚函数,我们想要覆盖这个虚函数,我们将不得不再次声明这个虚函数以使其在我们的派生类中也能工作。
class Base {
public:
virtual void virtualFunction();
static int s_whatSoEver[];
private:
void _privateFunction();
}
class Derived {
public:
virtual void virtualFunction();
}
这不是很愚蠢吗,因为如果我们想更改虚函数原型,就必须更改派生的每个声明?
还有,为什么要在头文件中声明一些受保护或私有的函数,因为头文件是用来定义公共接口的,而使用这个接口的用户根本不需要关心它们呢?也许我们可以直接在 .cpp 文件中实现和声明私有或受保护的函数,就像 Objective-C 一样。
C++ 也没有静态初始化器,如果我们想初始化一些静态类变量,我们必须为此创建一个类:
class BaseStaticVariableInitializer {
public:
BaseStaticVariableInitializer() {
Base::s_whatSoEver = new int[20];
for (int i = 0; i < 20; i++) {
s_whatSoEver[i] = xxx;
}
}
~BaseStaticVariableInitializer() {
delete [] Base::s_whatSoEver;
}
}
并专门为其初始化一个静态类常量:
static BaseStaticVariableInitializer s_baseStaticVariableInitializer;
对不起,我的无知,但是您编写 C++ 代码以适应 DRY 的正确方法是什么?