gpt4 book ai didi

c++ - 如何设计一个始终是另一个类的成员的类

转载 作者:行者123 更新时间:2023-12-02 02:26:59 24 4
gpt4 key购买 nike

假设我有一个 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. Fish需要知道fishTank的属性,fish类中的一切都取决于鱼缸:如何将鱼加载到鱼缸中取决于鱼缸的大小、鱼的方式移动取决于陷阱的大小和属性等。
  3. 同一个鱼缸里可以有多种不同种类的鱼。

我的第一次尝试是创建 Fish 类并将水箱作为 Fish 构造函数中的参数传递。然后将一条鱼作为私有(private)成员添加到水箱中:

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

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

这是实现抽象鱼类或在水箱内嵌套鱼之类的东西的正确位置吗?

最佳答案

老实说,就像吃里斯一样,没有正确或正确的方法可以做到这一点。我个人?鱼缸会有一个鱼的 vector ,然后如果鱼需要游动 1 次,我会在鱼缸上有一个游泳方法。这将调用每条鱼并告诉它们游泳,并将鱼缸作为其游泳方法的参数传递。就像这样:

class FishTank;

class Fish {
public:
void swim(const FishTank* tank) {

}
};

class FishTank {
private:
std::vector<Fish> allFish;

public:
void tick() {
for(Fish& fish : allFish){
fish.swim(this);
}
}
};

确实有十几种方法可以解决这个问题。我推荐阅读一本书,其中介绍了这样的内容:设计模式:可重用面向对象软件的元素,作者:Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides (ISBN 10: 0201633612)

关于c++ - 如何设计一个始终是另一个类的成员的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58730825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com