如何重载 << 运算符?
How to overload the << operator?
我正在尝试构建自己的 std::vector
class 但我无法重载下标 ([]
) 和 cout <<
运算符。
到目前为止,我已经尝试将 <<
运算符定义为 class 的 public 成员,然后将函数的主体写在 class 声明之外。
现在我正在从 iostream
库中获取充满错误的终端页面,我什至不知道从哪里开始浏览它们。
我是 C++ 初学者,不习惯 friend
关键字或 template
关键字。我做错了什么?
template<typename T>
class MyVector {
private:
T* Array;
public:
T& operator[](int b)
{
...
}
std::ostream& output(std::ostream& s) const;
};
std::ostream& operator<<(std::ostream& output, MyVector& A)
{
int i;
for(i = 0; i < A.GetDimension(); i++)
{
output << A[i] << " ";
}
output << "\n";
return output;
};
你说的对,你只是忘了模板声明:
template <typename T>
std::ostream& operator<<(std::ostream& output, MyVector<T>& A)
{
int i;
for (i = 0; i < A.GetDimension(); i++)
{
output << A[i] << " ";
}
output << "\n";
return output;
};
template<typename T>
class MyVector{
...
std::ostream& printToStream(std::ostream& output) const {
int i;
for (i = 0; i < Dimension; i++) {
output << Array[i] << " ";
}
output << "\n";
return output;
}
...
};
template<typename T>
std::ostream& operator<<(std::ostream& output, const MyVector<T>& A) {
return A.printToStream(output);
}
我正在尝试构建自己的 std::vector
class 但我无法重载下标 ([]
) 和 cout <<
运算符。
到目前为止,我已经尝试将 <<
运算符定义为 class 的 public 成员,然后将函数的主体写在 class 声明之外。
现在我正在从 iostream
库中获取充满错误的终端页面,我什至不知道从哪里开始浏览它们。
我是 C++ 初学者,不习惯 friend
关键字或 template
关键字。我做错了什么?
template<typename T>
class MyVector {
private:
T* Array;
public:
T& operator[](int b)
{
...
}
std::ostream& output(std::ostream& s) const;
};
std::ostream& operator<<(std::ostream& output, MyVector& A)
{
int i;
for(i = 0; i < A.GetDimension(); i++)
{
output << A[i] << " ";
}
output << "\n";
return output;
};
你说的对,你只是忘了模板声明:
template <typename T>
std::ostream& operator<<(std::ostream& output, MyVector<T>& A)
{
int i;
for (i = 0; i < A.GetDimension(); i++)
{
output << A[i] << " ";
}
output << "\n";
return output;
};
template<typename T>
class MyVector{
...
std::ostream& printToStream(std::ostream& output) const {
int i;
for (i = 0; i < Dimension; i++) {
output << Array[i] << " ";
}
output << "\n";
return output;
}
...
};
template<typename T>
std::ostream& operator<<(std::ostream& output, const MyVector<T>& A) {
return A.printToStream(output);
}