我有這套類。簡單示例中的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