【发布时间】:2012-04-07 14:43:24
【问题描述】:
在我的项目中,有一个基类和三个不同的派生类。我在基类中有一些宏变量写为 const int 。所有派生成员都将访问这些成员并且将看到相同的值。因为它是一个常量,并且不会改变,所以保持 3 个不同的值会浪费空间。因此,我想要一种方法来只维护一个基类 const 成员的副本,以便所有派生类都使用相同的。
例子
//Base.hpp
Class Base {
const int ZER0;
const int ONE;
};
//Derived1.hpp
class Derived1:public Base {
int some_method1();
};
//Derived1.cpp
int Derived1::some_method1() {
int value = ZERO;
}
//Derived2.hpp
class Derived2:public Base {
int some_method2();
};
//Derived2.cpp
int Derived2::some_method2() {
int value = ONE;
}
//main.cpp
Derived1 d1;
d1->some_method1();
Derived d2;
d2->some_method2();
//在这两种方法中,值都是恒定的,但零和一仍然会有不同的空间。有没有办法,我只维护一个副本?我可以想到静态变量。在类中使用静态是否可以,我在哪里初始化静态变量。请指教。
PS:这个问题可能是重复的,但是我找不到类似的东西,如果你觉得是这样,请随时重定向到相应的文章/问题;
【问题讨论】:
-
我在这里闻到了“我的第一个本土 RTTI 实现”的味道,如果是这样,请使用
dynamic_cast处理此类事情。 -
也许你应该考虑使用
static类成员。 -
^是的,我想静态是要走的路,我要使用它。
标签: c++ inheritance static macros constants