【发布时间】:2013-02-04 22:14:34
【问题描述】:
抱歉标题含糊。
我正在编写一组类,但我很难想出一种直观的方法来分解基构造函数中所做的事情和派生构造函数中所做的事情。
我的问题如下:
所有课程都要求按顺序完成步骤 A、C 和 E。因此,将它们放在基础构造函数中是有意义的。
步骤 B 和 D 对于每个派生类都是唯一的。
不幸的是,B必须在之后 A和之前 C完成,同样地,D必须在之后 C和之前 E. 这些是 OpenGL 函数调用,我受限于它们的顺序。
我最初尝试过类似这样的东西,希望尽可能地封装在基类中:
public class MyBase
{
MyBase()
{
A():
B();
C();
D();
E();
}
void A() {...}
void C() {...}
void E() {...}
virtual void B() = 0;
virtual void D() = 0;
}
public class MyDerived : public MyBase
{
MyDerived() : MyBase() {}
void B() {...}
void D() {...}
}
但这在 C++ 中是不可能的...
除了以下之外还有更直观的方法吗:
public class MyBase
{
MyBase() {}
void A() {...}
void B() {...}
void C() {...}
}
public class MyDerived : public MyBase
{
MyDerived()
{
A():
B();
C();
D();
E();
}
void B() {...}
void D() {...}
}
我希望尽可能避免代码重复。
有什么想法吗?
【问题讨论】:
-
这些方法一定要在构造函数中调用吗?我经常发现只有一个称为 post-construction 的“初始化”方法更容易。只要每个继承的类和成员都有一个默认构造函数,那么这样做就不会造成任何障碍。如果每个类都派生自一个公共基类,您甚至可以将它们全部放在一个向量上并在循环中调用初始化方法。
-
我认为将
C和E移动到派生类型可能会更好。我很难想象这种情况。
标签: c++ inheritance polymorphism