我有一个基类,用于存储数据库一条记录的所有列。在那个课程中我也有设置和方法。我还有一个名为 Run() 的纯虚拟方法。现在我想要三个子类,使用 Run() 方法将该记录的不同字段发送给不同的接收者。 但是,问题就在这里。子类继承不使用的变量(本例中数据库记录的字段)。 我只想仅使用基类中的公共文件,并将其他文件存储在子类中。那么如何使用基类指针设置子类的成员变量呢? Child1、Child2、Child3 都没有使用所有 field1、field2、..、fieldN。如果将每个子类想要的字段转移到自己的类中,那么我将如何使用父类的 SetFields 在不同的子类中设置不同的字段?
class Interface
{
public:
int field1, field2, field3, ..., fieldN;
void SetFields(field1,field2,field3,fieldN); // --\> gets all the fields as arguments
virtual void Run() = 0;
};
class Chid1: public Interface
{
void Run() {
/// send field1, field2, field3 to recepient1
}
};
class Chid2: public Interface
{
public:
void Run() {
/// send field4, field5, field6 to recepient2
}
};
class Chid3: public Interface
{
public:
void Run() {
/// send field7, field8, fieldN to recepient3
}
};
I
需要可以使用父类设置子成员的设计模式。
要求
我只想使用基类中的公共字段,并存储 其他人在儿童班。
Common
而不是 Interface
Child1、Child2、Child3 类均不使用所有字段(field1、 字段2,...)。
Additional<n>
而不是 Child<n>
我想要三个子类发送不同的字段 使用 Run() 方法记录到不同的接收者。
Additional<n>
)发送专业领域。设计
如果我正确理解了需求,那么我认为不需要继承、接口类、基类等。
我建议改用聚合。
C++代码
class Common
{
public:
int mnField1;
int mnField2;
...
AdditionalA madditionalA;
AdditionalB madditionalB;
...
void SetFields(int nFieldC1, int nFieldC2, int nFieldA1, int nFieldB1) {
mnField1 = nFieldC1;
mnField2 = nFieldC2;
...
madditionalA.mnField1 = nFieldA1;
madditionalB.mnField1 = nFieldB1;
...
}
void Run() {
// send mnField1, mnField2 ...
madditionalA.Run();
madditionalB.Run();
}
};
class AdditionalA
{
public:
int mnField1;
...
void Run() {
// send mnField1
}
};
...
提示