如何使用重载打印派生类的某些特定属性<

问题描述 投票:0回答:1

我有一个名为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(){返回名称; } ...

c++ sharepoint overloading derived-class
1个回答
0
投票

尝试一下:

© www.soinside.com 2019 - 2024. All rights reserved.