【发布时间】:2020-04-08 21:07:55
【问题描述】:
我将如何覆盖类中的<< 运算符?或者能够在班级内打印vector<byte>。我当前的代码看起来像
ostream& operator<<(ostream& os, const vector<byte>& bytes)
{
if (bytes.size() == 0)
return os;
for (size_t i = 0; i < bytes.size()-1; i++)
os << hex << (int)bytes[i] << " ";
os << bytes.back();
return os;
}
它挂在类外,只有类外的函数可以cout <<并打印vector<byte>。我希望能够在课堂上打印一份。
编辑 1
我在提到我如何使用它的部分看到了一些混乱,这将是一个很好的例子
# method 1
ostream& operator<<(ostream& os, const vector<byte>& bytes)
{
if (bytes.size() == 0)
return os;
for (size_t i = 0; i < bytes.size()-1; i++)
os << hex << (int)bytes[i] << " ";
os << bytes.back();
return os;
}
int main( {
vector<byte> v = something;
cout << “Vector Example: ” << v << endl;
}
我想在班级中获得最高的method 1,但对于某些 cmets,这是不可能的。有什么不同的方法吗?
编辑 2
感谢@StephanH,我想分享我修改后的工作代码。
#include <vector>
#include <fstream>
#include <cstddef>
#include <iostream>
#include <iomanip>
#include <string>
std::ostream& operator<<(std::ostream& os, const std::vector<std::byte>& bytes)
{
if (bytes.size() == 0)
return os;
for (size_t i = 0; i < bytes.size() - 1; i++)
os << std::hex<< (int)bytes[i] << " ";
os << int(bytes.back());
return os;
}
class MClass
{
public:
std::vector<std::byte> smth;
friend std::ostream& operator<<(std::ostream& stream, const MClass& obj) {
std::string ascii = "hello";
std::vector<std::byte> bytes(ascii.length());
for (size_t i = 0; i < ascii.length(); i++)
{
bytes[i] = static_cast<std::byte>(ascii[i]);
}
return stream << bytes;
}
};
int main() {
MClass m;
std::cout<<m;
}
仍在试图弄清楚如何打印出我在做什么m.smth
【问题讨论】:
-
我只想补充一点,我对 c++ 还很陌生,我 5 天前开始学习,但我现在正在编写一个安全且体积更大的加密程序。
-
您在尝试编译时遇到什么错误?这个类是全部在一个文件中,还是拆分为
.h和.cpp文件? -
什么是向量
- C++ 中没有字节数据类型 -
@StephanH en.cppreference.com/w/cpp/types/byte 不算数?
-
@RidleyNelson 只有
operator<<的左侧才有可能将其实现为类成员方法。由于std::ostream在您的示例中是左侧,因此您无法在类中实现此版本的operator<<,它需要是一个单独的函数。这很好。无论您遇到什么问题,都与我们看不到的其他问题有关,因为您没有展示您是如何尝试使用它的。
标签: c++ class vector overriding operators