访问匿名子对象 C++ (cout)

3
class Parent
{
    ...
    friend ostream& operator<<(ostream&, const Parent&);
};

class Child : public Parent
{
    ...
    friend ostream& operator<<(ostream&, const Child&);
};

ostream& operator<< (ostream& os, const Parent& p)
{
    os << ... ;
    return os;
}

ostream& operator<< (ostream& os, const Child& c)
{
    os << c.Parent << ... ;    // can't I access the subobject on this way?
    return os;
}

我在Child的操作符中如何调用Parent的操作符?这会导致错误"invalid use of Parent::Parent"。

3
这段代码是C++中的类型转换语句,将对象c强制转换为其父类Parent的常量引用,并将结果输出到流对象os中。 - Piotr Skotnicki
4
@PiotrS。把这个作为答案。 - πάντα ῥεῖ
1个回答

4

c.Parent 不是有效的语法,而你的 operator<< 也不是成员函数。要调用正确的重载函数,请改变 c 的上下文:

ostream& operator<<(ostream& os, const Child& c)
{
    os << static_cast<const Parent&>(c);
    return os;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接