我有这套类。简单示例中的C++多态性
class Animal {
public:
Animal(uint32_t attr1, uint32_t attr2);
virtual uint32_t get_attr1() const;
virtual uint32_t get_attr2() const;
private:
uint32_t attr1;
uint32_t attr2;
};
class Dog: public Animal {
public:
Dog(uint32_t attr1, uint32_t attr2, uint32_t attr3);
uint32_t get_attr3() const;
private:
uint32_t attr3;
};
class Cat: public Animal {
public:
Cat(uint32_t attr1, uint32_t attr2, uint32_t attr4);
uint32_t get_attr4() const;
private:
uint32_t attr4;
};
现在我想有一个声明
vector<Animal*> animals;
和几个功能如下:
void f(Dog* dog);
void f(Cat* cat);
和验证码:
for (auto animal: animals) {
f(animal);
}
如何使多态性出这个代码?它看起来像动物不像猫或狗一样对待。
为什么你要处理一个指向矢量的指针?另外,'f'函数应该是'cat'和'dog'类的成员。 – scohe001
我不希望f函数因设计选择而成为类的成员。同意指针虽然 – tomtom
如果你这样做,然后看看[dynamic_cast](http://en.cppreference.com/w/cpp/language/dynamic_cast) – scohe001