基类和派生类构造函数多态性问题
Base and Derived class constructor polymorphism woes
很抱歉标题含糊不清。
我正在写一组类,我很难想出一种直观的方法来分解基本构造函数和派生构造函数中的操作。
我的问题如下:
所有类都要求按顺序完成步骤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() {...}
}
我希望尽可能避免代码重复。
有什么想法吗?
如果你确实想在构造函数中调用它,但不同意在之后调用它,你可以通过以下操作来减少混乱。
public class MyBase
{
protected:
void templateMethod()
{
A():
B();
C();
D();
E();
}
private:
void A() {...}
void C() {...}
void E() {...}
virtual void B() = 0;
virtual void D() = 0;
};
public class MyDerived : public MyBase
{
MyDerived() : MyBase() {templateMethod();}
void B() {...}
void D() {...}
};
不过,这并不是一个真正的模板方法模式,因为现在所有派生类都必须调用它,而不是为基类调用一次。
既然在构造函数中调用虚拟函数可能很危险,那么使用宏是一个可以接受的解决方案吗?
#define MY_BASE_INIT A();B();C();D();E();
public class MyBase
{
MyBase() {}
void A() {...}
void C() {...}
void E() {...}
}
public class MyDerived : public MyBase
{
MyDerived()
{
MY_BASE_INIT
}
void B() {...}
void D() {...}
}
相关文章:
- C++boost序列化多态性问题
- 为什么我在虚幻引擎中的多态性和接口方面遇到问题?
- 使用多态性解决代码重复问题
- 与智能指针和矢量C 的多态性有关的问题
- std::vector 和/或多态性的问题
- 多种继承和多态性问题
- C 成员功能多态性问题
- C 的多态性问题 - 数据覆盖
- 静态多态性问题
- 我正在尝试[C++]练习多态性和OOD原则。需要指导和几个问题的答案
- C++对象多态性问题
- 涉及指针成员变量和多态性的非常奇怪的问题
- 多态性和受保护的继承问题
- 多态性确定问题
- 当独生子女类具有虚拟方法时使用多态性的问题
- 解决这个多态性问题的最优雅的方法
- 带有列表的c++多态性问题
- 实例化子类的多态性问题
- 基类和派生类构造函数多态性问题
- C++中的多态性问题