Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 打印对象名称而不是内存地址?_C++_Oop - Fatal编程技术网

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

C++ 打印对象名称而不是内存地址?,c++,oop,C++,Oop,假设我有一个名为Foo()的类对象,并且只想通过传递打印函数Foo对象而不是Foo.name来返回Foo的名称。例如: class Object { public: Object(); ~Object(); const char* name; }; 然后 这叫什么?我该怎么做?起初我想做一个操作符重载,但是没有操作符重载这个。。。还是有?不同的方法是可能的: 1) 执行此操作的通常方法是重载运算符可以在问题中添加Debug.Log函数吗?这只是一个任意函数。替换为p

假设我有一个名为Foo()的类对象,并且只想通过传递打印函数Foo对象而不是Foo.name来返回Foo的名称。例如:

class Object
{
public:

    Object();
    ~Object();

    const char* name;
};
然后


这叫什么?我该怎么做?起初我想做一个操作符重载,但是没有操作符重载这个。。。还是有?

不同的方法是可能的:


1) 执行此操作的通常方法是重载运算符可以在问题中添加
Debug.Log
函数吗?这只是一个任意函数。替换为println或cout或其他内容。真的吗?谁否决了这一点?为什么?原因是参数类型会对处理转换所使用的运算符(如果有的话)产生影响。但是,如果您不需要帮助,请不要添加它。在您的场景中,我只会重载Debug的Log函数,通过访问其name变量来处理Object类型的参数。类型应该是Object,我认为这很明显?根据参数的类型,您可以使用转换运算符,但是类型很重要,因为不同的转换运算符有不同的缺点。我确实看到我可以重载
Debug.Log(myObject) //Should print the object name
class Object
{
public:

    // ...

    friend std::ostream& operator<< (std::ostream& stream, const Object& obj) {
        [...]
    }
};
class Printable{
    virtual void Print() = 0;
}
void Log(const Printable& obj)
{
  obj.Print();
}