我有一个名为Animals的基本类,还有两个派生的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;
}
...
而且我有shared_ptr的vec
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;
}
但是以这种方式,我只能打印名称和颜色或动物(这些属性在基类中)我的问题是:我该如何打印猫的生命和狗的性别的所有属性???
我有一个名为Animals的基本类,还有2个派生类Dog and Cat的Animal {受保护:std :: string name; std :: string颜色;公共:std :: string getName(){返回名称; } ...
尝试一下: