У меня есть базовый класс с именем Animals и 2 производных класса Dog and Cat
class Animal{
protected:
std::string name;
std::string color;
public:
std::string getName() {
return name;
}
std::string getColor() {
return color;
}
...
class Cat : public Animal {
private :
int lives;
public :
int getLives() {
return lives;
}
...
class Dog : public Animal {
private :
std::string gender;
public:
std::string getGender(){
return gender;
}
...
, и у меня есть c из shared_ptr
std::vector<std::shared_ptr<Animal>> animals
Я добавил несколько кошек и собак в вектор, и я пытаюсь распечатать все характеристики каждого животного из вектора, используя оператор >> (это домашнее задание, мы должны использовать это), и я сделал это
template <typename T>
std::ostream& operator<<(std::ostream& os, const std::vector<std::shared_ptr<T>>& v)
{
for (int i = 0; i < v.size(); ++i) {
os << v[i]->getName();
os << "-";
os << v[i]->getColor();
if (i != v.size() - 1)
os << ", ";
os<<"\n";
}
return os;
}
но таким образом я могу напечатать только имя и цвет или животных (эти атрибуты находятся в базовом классе). Мой вопрос: Как я могу напечатать все атрибуты, для жизни кошек и для пола собаки? ??