3

我有这门课:

// in Platform.h
class Platform
{
private:
    float y;
    float xi;
    float xf;
public:
    Platform(float y, float xi, float xf);
    virtual ~Platform(void);
    float getxi();
    float getxf();
};

我希望能够做到这一点:

Platform* p = new Platform(1.0,2.0,3.0);
cout << p; // should it be *p?

我尝试重载“<<”运算符,如下所示:

// in Platform.cpp
std::ostream& operator<<(std::ostream& out, Platform* p ) 
{
    out << "Platform: xi=" << p->getxi() << ", xf=" << p->getxf() << std::endl;
    return out;
}

但这只是打印一个内存地址(当然,因为p是一个指针......)。我很确定上面的函数根本没有被调用。

4

3 回答 3

2

是的,做一个 *p:

so cout << *p ;

而传统的运营商是...

std::ostream& operator << (std::ostream& out, const Platform& p) { } 

您还需要将其导出到头文件中,以便在外部可见。添加:

friend std::ostream& operator<<(std::ostream& out, Platform* p ) ;

到 Platform.h

于 2012-12-13T03:51:53.613 回答
2

重载声明需要从您使用它的地方可见。将其更改为Platform const&*p在您使用时使用,因为这是常规方式。

于 2012-12-13T03:55:25.700 回答
0

实际上这在 g++ 4.7.2 中有效,但可能取决于编译器。你可以做:

// in Platform.cpp
std::ostream& operator<<(std::ostream& out, Platform& p ) 
{
    out << "Platform: xi=" << p.getxi() << ", xf=" << p.getxf() << std::endl;
    return out;
}

并使用间接打印 ( *p)

于 2012-12-13T03:58:18.133 回答