use*_*703 3 c++ inheritance constructor
我有以下类层次结构:
class Human {
void foo()=0; //abstract
int age;
bool sex;
double size;
Human(int pAge,bool pSex,double pSize) : age(pAge), sex(pSex), size(pSize)
}
class MetaHuman : Human { //abstract
double power;
bool fly;
bool heal;
MetaHuman(int pAge,bool pSex,double pSize,double pPower,bool pFly,bool pHeal) : Human(...), power(pPower),fly(pFly),heal(pHeal) }
class SuperHuman : MetaHuman {
void foo() const {}; //non abstract
bool xray;
bool inspace;
double teleportation;
SuperHuman(int pAge,bool pSex,double pSize,double pPower,bool pFly,bool pHeal,bool pXray,bool pInspace,double pTeleportation) :
MetaHuman(...),xray(pXray),inspace(pInspace),teleportation(pTeleportation)
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我只是在每个派生类中重复基类构造函数的所有参数,并添加相对于派生类的几个参数。
有没有什么方法/模式/设计可以避免像这样重写所有内容?
小智 5
当涉及到严格的 OOP 时,通常通过将参数封装在结构体中来处理此类问题:
\nstruct HumanData {\n int pAge, \n bool pSex,\n double pSize,\n double pPower,\n bool pFly,\n bool pHeal\n}\n
Run Code Online (Sandbox Code Playgroud)\n或者,您可以构建一个在超人类基础上创建超人类的结构。
\n只是一个提示,正如我看到的,你正在尝试一些游戏开发。\n通常将属性包装在结构中,“回报很大”。\n所以让你的 SEX 成为基于布尔的枚举(我知道,有点矫枉过正: ))。您可以在此处阅读有关 C++0x 中的基于类枚举的信息: https: //smartbear.com/blog/closer-to-perfection-get-to-know-c11-scoped-and-ba/ ?feed=develop
\n您将获得额外的强类型类数据,几乎不会影响性能。
\n附带说明:您绝对确定需要使您的类层次结构如此陡峭吗?正如 Stroustrup 所说,“Don\xe2\x80\x99t 立即为你的所有类发明一个独特的基础。通常,对于许多/大多数类,如果没有它,你可以做得更好。” - 这是相当准确的。
\nC++ 不是 C#/Java - 强迫它如此,只会使它变得反叛。
\n 归档时间: |
|
查看次数: |
1757 次 |
最近记录: |