gpt4 book ai didi

C++ 所有者类和子类的派生类

转载 作者:搜寻专家 更新时间:2023-10-31 01:15:47 24 4
gpt4 key购买 nike

所以假设我有一个由动物园类管理的动物类。

Animal is an abstract class to be derived by other real animal classes
class Animal{
public:
Animal();
virtual ~Animal() = 0;
//Various animal related functions
}

class Zoo{
public:
Zoo();
virtual ~Zoo();
virtual void updateAll();
//And various other functions dealing with animals
private:
vector<animal*> animals
}

现在假设我想创建一个 bird_zoo,并且我想重用大部分代码用于 Zoo 类和 Animal 类。

所以我做鸟类

class Bird : public Animal{
public:
Bird();
virtual ~Bird();
//all the various functions derived from Animal class
virtual void fly(); //New function that Animal didn't have
}

class Bird_Zoo : public Zoo{
public:
Bird_Zoo();
virtual ~Bird_Zoo();
//And various other functions dealing with animals, derived from Zoo
virtual void flyAll(); //New function that Zoo didn't have
private:
//vector<??????> birds
}

我怎么得到这个Bird_Zoo对付飞鸟的功能有哪些?如果我留在vector<Animal*>来自 Zoo 类,我如何调用 fly() ?我真的必须把它转换到Bird*吗?每次?有没有办法在概念上“重载”vector<Animal*>作为vector<Bird*> ,这样所有旧的 Zoo 功能仍然可以正常工作?

谢谢。

最佳答案

另一种可能性是使用模板。

class Zoo {
// ...
virtual void updateAll() = 0;
};

template <typename T,
typename = typename enable_if<is_base_of<Animal, T>::value>::type>
class ZooWithAVector : public AbstractZoo {
public:
virtual void updateAll() { /* ... */ }
// Various functions dealing with T-animals
private:
vector<T*> animals;
};

typedef ZooWithAVector<Animal> TypicalZoo;

class BirdZoo : public ZooWithAVector<Bird> {
virtual void flyAll() { /* work with the vector<Bird> */ }
};

关于C++ 所有者类和子类的派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9726753/

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