私はこのクラスのクラスを持っています。単純な例の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