模板中重载的 ostream 运算符
Overloaded ostream operator in template
我在为我的模板 class 重载 ostream operator<< 时感到困惑。
(删除不必要的代码)
sparseArray2D.h:
#include <iostream>
using namespace std;
template <typename T>
class sparseArray2D
{
private:
//...
public:
//...
friend ostream& operator << (ostream&, const sparseArray2D<T>&);
//...
}
template <typename T>
ostream& operator << (ostream& os, const sparseArray2D<T> &_matrix)
{
//...
os<<"Overloaded operator works";
return os;
};
和主要:
#include "sparseArray2D.h"
int _tmain(int argc, _TCHAR* argv[])
{
//...
sparseArray2D<int> *matrX = new sparseArray2D<int>(10, 9, 5);
cout << matrX;
//...
}
在 VS2012 中没有错误和警告,但在控制台中我有 8 个符号作为 link 或指向对象的指针。喜欢“0044FA80”。
怎么了?
那是因为您在 sparseArray2D<T>
上超载(不是重新加载),但这不是 matrX
的情况:
sparseArray2D<int> *matrX = new sparseArray2D<int>(10, 9, 5);
// ^^
cout << matrX;
matrX
是一个指针。因此,您只是流式传输指针——默认情况下它会记录其地址……显然是 0x0044FA80。
你想要的是:
cout << *matrX;
我在为我的模板 class 重载 ostream operator<< 时感到困惑。 (删除不必要的代码)
sparseArray2D.h:
#include <iostream>
using namespace std;
template <typename T>
class sparseArray2D
{
private:
//...
public:
//...
friend ostream& operator << (ostream&, const sparseArray2D<T>&);
//...
}
template <typename T>
ostream& operator << (ostream& os, const sparseArray2D<T> &_matrix)
{
//...
os<<"Overloaded operator works";
return os;
};
和主要:
#include "sparseArray2D.h"
int _tmain(int argc, _TCHAR* argv[])
{
//...
sparseArray2D<int> *matrX = new sparseArray2D<int>(10, 9, 5);
cout << matrX;
//...
}
在 VS2012 中没有错误和警告,但在控制台中我有 8 个符号作为 link 或指向对象的指针。喜欢“0044FA80”。
怎么了?
那是因为您在 sparseArray2D<T>
上超载(不是重新加载),但这不是 matrX
的情况:
sparseArray2D<int> *matrX = new sparseArray2D<int>(10, 9, 5);
// ^^
cout << matrX;
matrX
是一个指针。因此,您只是流式传输指针——默认情况下它会记录其地址……显然是 0x0044FA80。
你想要的是:
cout << *matrX;