打印对象名称而不是内存地址?

时间:2014-05-29 02:52:33

标签: c++ oop

假设我有一个名为Foo()的类对象,并希望仅通过将我的print函数传递给Foo对象而不是通过Foo.name来返回Foo的名称。例如:

class Object
{
public:

    Object();
    ~Object();

    const char* name;
};

然后

Debug.Log(myObject) //Should print the object name

这甚至叫什么,我该怎么办?起初我想过做一个操作符重载,但没有操作符为此重载...或者是否存在?

1 个答案:

答案 0 :(得分:1)

可能采用不同的方法:

1)对于每个必须记录的对象,通常的方法是overload operator<<,并在标准的ostream上使用它。

class Object
{
public:

    // ...

    friend std::ostream& operator<< (std::ostream& stream, const Object& obj) {
        [...]
    }
};

它有许多优点,包括:

  • 链接电话的可能性
  • 可以与任何类型的流一起使用
  • STL友好

2)如果你想坚持你的设计,为所有“可打印”对象提供一个纯粹的基类

class Printable{
    virtual void Print() = 0;
}

让Debug.Log函数将Printable作为参数

void Log(const Printable& obj)
{
  obj.Print();
}

理想情况下,您可以将std :: ostream作为Print()函数的参数传递