我想在矢量中存储少量动物。动物可能是猫或狗。后来我想让猫和狗从矢量中回来。我可以在这里使用类型转换吗?
例如
class Animal{
string name;
void makeSound();
}
class Dog:public Animal{
string owner;
void makeSound(){
cout << "Woof";
}
class Cat:public Animal{
string home;
void makeSound(){
cout << "Mew";
}
在主程序中。
vector<Animal> list;
Cat c = Cat();
list.push_back(c);
Cat cat = (Cat)list.at(0); // how can I do this
PS:
这不是具有语法的确切代码。但我需要做这样的事情。
答案 0 :(得分:2)
您可以在矢量中存储指向Animal的指针,如: -
std::vector<Animal*> vec;
应该没有必要明确检查你在向量中存储的对象类型......毕竟这是C ++中虚函数的本质。
无论如何,如果你想要它: -
void func( Animal* ptr )
{
if ( Cat* cat = dynamic_cast<Cat*>(ptr) )
//cat type
if ( Dog* dog = dynamic_cast<Dog*> (ptr) )
//dog type
}