使用父类的重载方法
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;
我有两个类:父亲和儿子。儿子继承父亲。
两者都在重载 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;