在C ++中键入转换

时间:2014-11-18 10:42:47

标签: c++ casting type-conversion

我想在矢量中存储少量动物。动物可能是猫或狗。后来我想让猫和狗从矢量中回来。我可以在这里使用类型转换吗?

例如

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:

这不是具有语法的确切代码。但我需要做这样的事情。

1 个答案:

答案 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
}