【发布时间】:2017-01-09 09:26:01
【问题描述】:
由于我对面向对象代码的设计不是很有经验,所以我有以下问题:
我有一个组合框 cb_GRAN,其中包含代表 21 个几何图形的 21 个条目。根据 cb_GRAN 中所做的选择,我想开始对几何体表面进行不同的计算(实际上还有更多:更复杂的计算,LineEdits 的开/关等,但为了保持简单,让`s只是说表面的计算。)
为了解决这个问题,我创建了一个几何类和 21 个继承自几何的类(Geo_1、Geo_2、...Geo_21)。我也有虚方法
virtual void calculateSurface();
要定义哪个类Geo_x要创建和计算表面,我想出了以下想法:
Geometry *GEO;
QVector < Geometry*> qvec_GEO
qvec_GEO << new Geo_1()<< new Geo_2()<< new Geo_3()<<...... << new Geo_21() ;
GEO = qvec_GEO[ui->cb_GRAN->currentIndex()];
GEO->calculateSurface();
- 这是否是解决我的问题的可行方法,还是我这样做时会遇到问题?
- 创造尽可能多的东西是个好主意吗? 21 个对象,而我只需要一个?
【问题讨论】:
-
为什么不简单地使用 "switch (currentIndex()){ case 0: GEO = new Geo_1(); break; case 1: ..." 或类似的东西?也许在某些功能?一个更好的解决方案可能是切换组合框的内容,即在 QString 上,这样如果项目以另一个顺序放置,它仍然会做它应该做的事情。无法识别项目时出现错误。我不太赞成没有内在意义的 indizes。顺便说一句,用大写字母命名局部变量并不常见。