【发布时间】:2014-09-07 07:40:24
【问题描述】:
我被分配了清理类层次结构的任务,但我有点墨守成规。我现在留下的东西大致如下:
class Base
{
Base() = 0;
function1();
...
function5();
protected:
int variable1_;
...
int variable10_;
};
class DerivedOne
: public Base
{
DerivedOne() = 0;
function6();
...
function10();
protected:
int variable11_;
...
int variable20_;
};
class DerivedTwo
: public DerivedOne
{
DerivedTwo()
: DerivedOne()
{
... Fill variable1_ to variable25_ with data read from file ...
variable1_ = ...
}
function11();
...
function15();
private:
int variable21_;
...
int variable25_;
};
所以在 DerivedTwo 中为 25 个变量赋值,容易出错。当另一个类从 DerivedOne 继承时,几乎可以肯定该人会忘记初始化其中一个变量。
我一直在尝试不同的方法来设计这个层次结构,但没有什么感觉是对的。
我知道如果不知道这些类的实际作用就很难说出具体的内容,但是我很想知道这个设计是否存在根本性的错误,或者我是否忽略了一些初始化所有变量的优雅方法。
【问题讨论】:
-
为什么不使用特定的非默认构造函数(例如传递文件名、共享句柄或其他)初始化这些类之一中的变量?有什么理由不这样做?
-
从 DerivedOne 继承的其他类不会初始化文件中的值,因此 Base 类应该更通用。抱歉,我应该在帖子中提到这一点。
-
你能贴出真实的代码吗?
Base() = 0是什么?DerivedTwo() : DerivedOne()是什么?你知道DerivedOne()是自动调用的吗? -
是否需要在构造函数中读取文件?如果读取出错或无法打开文件怎么办:返回一个空对象?还是不一致?
标签: c++ class oop inheritance design-patterns