【发布时间】:2019-11-06 13:02:10
【问题描述】:
假设我有一个fishTank 课程。这个类将代表一个鱼缸,它有一个大小,一些鱼可以进入的边界,一些鱼不能进入的障碍,一些水流过鱼缸,等等。
class fishTank
{
private:
double length;
double height;
//And some more complex things that define a fish tank
public:
fishtank(double, double, ...);
}
现在我需要往鱼缸里加鱼。声明我的鱼类的适当方式是什么? (鱼代表一大群个体鱼)
- 我的鱼总是在
fishTank里面,我一个人吃鱼是没有意义的。 - 鱼需要知道
fishTank的属性,鱼类中的一切都取决于水族箱:如何将鱼加载到水族箱中取决于水族箱的大小,鱼移动的方式取决于大小以及陷阱的属性等。 - 同一个鱼缸里可以有很多不同种类的鱼。
我的第一次尝试是创建 fish 类并将水箱作为参数传递给 fish 构造函数。然后将鱼的向量作为私有成员添加到水箱中:
class fish
{
private:
//All properties of fish
public:
fish(const fishTank& aTank, All other properties of fish);
}
class fishTank
{
private:
std::vector<fish> fishInTank;
//Same as before
public:
//Same as before;
}
这真的是实现我需要的正确方法吗?我只是不认为这是一个好的设计,我需要将鱼缸作为鱼的参数,然后将每条鱼添加到鱼缸中。这有意义吗?
这是否是实现抽象鱼类或将鱼嵌套在鱼缸内的正确位置?
【问题讨论】:
-
是的,对不起。只是我实际上是在 Penning-Malmberg 陷阱中使用等离子体。
-
旁白:以大写字母开头的
class名称是常规的,因此使代码更具可读性:egclass Fish. -
同一个鱼缸里可以有很多不同种类的鱼。
fish的不同实例或fish的不同派生类的实例?在后一种情况下,std::vector<fish>可能是一个糟糕的选择。 -
我建议不要给鱼一个鱼缸的引用,而是向鱼添加方法来告诉鱼该做什么,鱼缸会调用该方法,提供所有需要的参数(即传入鱼缸的宽度和高度以确保鱼不会离开鱼缸的边界)
标签: c++ class oop inheritance inner-classes