c++ 我应该把一个类内部的向量传递给该类的成员函数,还是直接访问它就可以了?

iyfamqjs  于 9个月前  发布在  其他
关注(0)|答案(2)|浏览(115)

我想知道是否应该将fishesvector传递到fishExists函数中,或者是否应该将fish而不是fishId传递到fishExists函数中

class Aquarium {
    std::vector<Fish*> fishes;

public:
    bool addFish(Fish* fish);

    bool fishExists(unsigned int fishId);
};

bool Aquarium::addFish(Fish *fish) {
    if(fishExists(fish->getId())) {
        return false;
    }

    fish->setAquarium(this);
    fishes.push_back(fish);

    return true;
}

bool Aquarium::fishExists(unsigned int fishId) {
    auto it = std::find_if(fishes.begin(), fishes.end(), [fishId](const Fish* fish) {
        return fish->getId() == fishId;
    });

    return it != fishes.end();
}

字符串

frebpwbc

frebpwbc1#

您不需要将fishes向量传递给bool fishExists(unsigned int fishId);函数,因为它们都在同一个类中。

成员函数可以直接访问其他成员

  • 在这种情况下:你的fishExists()函数可以访问你的fishes向量,因为它们在同一个类Aquarium中。
gcxthw6b

gcxthw6b2#

由于fishes是一个私有成员变量,它可以被同一个类的所有成员函数访问。因此没有必要将它作为参数传递。也许显式指定fishes是私有成员变量会更好:

class Aquarium {
private:
    std::vector<Fish*> fishes;

public:
    bool addFish(Fish* fish);

    bool fishExists(unsigned int fishId);
};

字符串
如果你有一个派生类:

class DerivedAquarium : public Aquarium{

public:
    bool derivedFishExists(unsigned int fishId, const std::vector<Fish*> &fishes);
};


在这种情况下,您必须将fishes向量传递给派生成员函数(可能通过在基类中添加getFishes()函数)。
因此,基类的成员函数可以访问所有成员变量(甚至是私有的)。
但是,派生类的成员函数不能访问其基类的私有成员。唯一的方法是使用友元声明。

相关问题