gpt4 book ai didi

C++ 插入运算符重载 (<<)

转载 作者:搜寻专家 更新时间:2023-10-31 00:56:09 25 4
gpt4 key购买 nike

我正在完成一个赋值,其中我必须重载插入运算符以获取 Node 对象。我在类定义之外但在 node.h 文件内创建了运算符重载函数。一切都编译得很好,但是没有调用重载运算符,而是我得到了简单的对象地址。

我被禁止修改调用代码,所以任何更改都必须是运算符重载。

我现在的代码:

/** OPERATOR << ***********************************/
template<class T>
inline std::ostream & operator << (std::ostream & out, const Node <T> *& pHead)
{
out << "INCOMPLETE";
return out;
}

现在,我只想确保重载运算符被调用。一旦我知道我正在调用正确的运算符(operator),我将修复输出代码。

调用代码:

// create
Node <char> * n = NULL;

// code modifying n

// display
cout << "\t{ " << n << " }\n";

最佳答案

注意参数pHead的类型是对非常量的引用,const Node<T>*是指向 const 的非常量指针,参数 n的类型是 Node<T>* (即指向非常量的非常量指针)。他们的类型不匹配,Node<T>*需要转换为const Node<T>* ,这是一个临时的,不能绑定(bind)到对非常量的引用。

简而言之,您不能将对非常量的引用绑定(bind)到具有不同类型的对象。

但是对 const 的引用可以绑定(bind)到临时的,因此您可以将参数类型更改为对 const 的引用:

template<class T>
inline std::ostream & operator << (std::ostream & out, const Node <T> * const & pHead)
// ~~~~~

或者改成按值传递,Node<T>*将被隐式转换为 const Node<T>*作为参数传递时。 (通过对 const 的引用传递指针没有多大意义。)

template<class T>
inline std::ostream & operator << (std::ostream & out, const Node <T> * pHead)

最后,重载operator<<指针类型看起来很奇怪。具有用户定义类型的最常见形式是:

template<class T>
std::ostream & operator << (std::ostream & out, const Node <T> & pHead)

关于C++ 插入运算符重载 (<<),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40179620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com