因此,我有2个类,一个继承自其他类,另一个是枚举类,它在我的问题中不起作用,但我还是要引用它:
enum class PetType {
Cat,
Dog,
Q
};
class Pet {
protected:
std::string name;
size_t age;
std::string breed;
static PetType spice;
public:
...
friend std::ostream& operator<< (std::ostream& out, const Pet& pet);
friend std::ostream& operator<< (std::ostream& out, const PetType& pet);
};
class Dog : public Pet {
private:
static PetType spice;
public:
...
};
PetType Dog::spice = PetType::Dog;
PetType Pet::spice = PetType::Q;
主要问题就在这里:我有一个2操作符〈〈。第一个只是帮助我cout〈〈PetType。第二个看起来像这样:
std::ostream& operator<< (std::ostream& out, const Pet& pet) {
out << "My name is " << pet.name << std::endl;
out << "I am " << pet.spice << ", " << pet.breed << std::endl;
out << "I am " << pet.age << " years old" << std::endl;
return out;
}
而且,我有一个带有不同Pet 's的向量,在将这个向量输出到控制台的函数中,我用cycle for循环它,并像这样做:
std::cout << pets[i];
我想让它输出我的petType,当然。但它输出Q作为我的petType,我选择了一个基本的一个抽象类宠物。我怎么能解决这个问题,请帮助!!!
1条答案
按热度按时间tag5nh1u1#
正如其他人所指出的,不能使用静态成员进行继承。您可以拥有它们,但不能像这样覆盖它们,并期望它们像虚拟成员一样解析。至于操作符〈〈,它知道它只与
Pet
类一起工作,因此它将始终返回该静态成员,而不是来自Dog
的成员。如果您向它提供Dog
类,则它将返回来自该成员的成员值。你有几个选择,不要使
PetType spice
成为静态的,在Dog构造函数中,像这样分配适当的枚举类型:或者创建虚方法并重写它
一个二个一个一个