如何设计将始终是另一个类的成员的类

问题描述 投票:3回答:4

想象一下我有一个fishTank类。该类将代表一个鱼缸,它的大小,可以划鱼的某些边界,不能划鱼的某些障碍,通过鱼缸的水的流动等等。

class fishTank
{
private:
    double length;
    double height;
//And some more complex things that define a fish tank
public:
     fishtank(double, double, ...);
}

现在我需要在鱼缸中添加鱼。宣告我的鱼类类别的适当方法是什么? (鱼代表一大群鱼)

  1. 我的鱼将始终位于fishTank内,我一个人独享鱼是没有意义的。
  2. 鱼需要了解fishTank的属性,鱼类中的所有内容都取决于鱼缸:如何在鱼缸中装载鱼取决于鱼缸的大小,鱼的移动方式取决于大小和陷阱的属性等。
  3. 同一缸中可以有很多不同种类的鱼。

我的第一个尝试是创建fish类,并在fish构造函数中将tank作为参数传递。然后将鱼的矢量作为私人成员添加到水箱中:

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;
}

这真的是实现我所需的正确方法吗?我只是认为这不是一个好的设计,我将需要鱼缸作为鱼的参数,然后将每条鱼添加到鱼缸中。这有意义吗?

这是实现诸如抽象鱼类之类或在鱼缸内筑巢鱼的正确地方吗?

c++ class oop inheritance inner-classes
4个回答
2
投票
老实说,就像吃一个Reeces一样,没有正确或正确的方法。我个人?鱼缸有一个鱼的载体,然后,如果鱼需要游泳一刻,我会在鱼缸上有游泳的方法。这将叫每条鱼并告诉他们游泳,将鱼缸作为其游泳方法的参数。像这样:

1
投票
鱼需要了解fishTank的属性

1
投票
您的Fish类可以在FishTank类内声明,甚至可以是受保护的或私有的。这将使在Fish之外更难/无法使用。但是没有办法表明它只能是FishTank的直接成员。

1
投票
这是我的方式:
© www.soinside.com 2019 - 2024. All rights reserved.