2014-11-18 4 views
-1

Я хочу хранить несколько животных в векторе. Животные могут быть кошками или собаками. Позже я хочу вернуть кошек и собак из вектора. Могу ли я использовать литье типов здесь?Преобразование типа в C++

например.

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

Вы действительно ничего подобного не нужно. Если вы хотите кошек и собак, сделайте вектор кошек и вектор собак. –

+1

У вас есть проблема нарезки с 'vector '. – Jarod42

+0

Jarod42, Мне нравится изображение проблемы с резкой животных! Не говорите PETA! – Persixty

ответ

2

Вы можете хранить указатель на животное в вашем векторе, как: -

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 
} 
+0

Я гугл и посоветовался с несколькими друзьями. Это тот ответ, который мне нужен. Всегда используйте указатели, когда вам нужно делать такие вещи, как это было советом. :) – user3946110

Смежные вопросы