使用父类的重载方法

Using an overloaded method of the parent

我有两个类:父亲和儿子。儿子继承父亲。

两者都在重载 ostream 运算符。

class Father {
public:
    friend ostream& operator<<(ostream& os, Father& v); //prints "father"
};

class Son : public Father {
public:
    friend ostream& operator<<(ostream& os, Son& v); // prints "son"
};

有没有办法,可以让儿子把父亲的“<<”称为“<<”?

我希望 Son 最终会打印:"father son"

您可以 static_cast Son&Father&:

class Son : public Father {
public:
    friend std::ostream& operator<<(std::ostream& os, Son& v) {
        os << static_cast<Father&>(v);
        os << "son";   
        return os;
    }
};

您可以使用虚方法覆盖。

class Father
{
public:
    virtual std::ostream& operator<<(std::ostream& os)
    {
        os << "father";
        return os;
    }
};

class Son : public Father
{
public:
    std::ostream& operator<<(std::ostream& os) override
    {
        Father::operator<<(os);
        os << " son";
        return os;
    }
};

但正如 TartanLlama 提到的那样,这会切换运算符的参数,因此您最终会像这样使用它:

Son s;
s << std::cout;