一个类应该能够输出其内容,还是另一个类应该这样做
Should a class be able to output its contents or should another class do that?
这是一个"最佳设计"问题。我知道有很多方法可以做到这一点。问题是,哪个是有利的,原因是什么。
一般来说:我有一堆包含不同类型数据的类。每个类都与其他类略有不同。在某些时候,我可能希望输出这些类中包含的数据,每个类实例在不同的时间点。我看到两种实现方式:
a) 为每个类编写某种 "output()" 方法。当我想输出时,我必须依靠这种方法存在。
b) 编写一个类"OutputClasses",它有一个方法"output()",它以不同的方式处理每个类的输出
哪一个是"标准"或预期的方式?以上之一还是别的什么?
推荐的方法是:
ostream& YourClass::Output(ostream& os) const;
每个类中的成员函数以及"独立"重载<<运算符调用它:
ostream& operator<<(ostream& os, const YourClass&c)
{
return c.Output(os);
}
资料来源:赫伯·萨特(Herb Sutter)的"特殊C++",第20项。类力学
萨特磨坊
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 运行同一解决方案的另一个项目的项目
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- C++从另一个类访问公共静态向量的正确方法是什么
- 是否可以将带有捕获和参数的 lambda 传递给另一个函数?如果是这样,如何?
- 我正在尝试用 DevC++ 编译一个套接字程序,但每次我这样做时,我都会收到很多链接器错误,如下所示:
- 做了主函数和另一个函数在C++使用相同的堆栈空间
- 一个类应该能够输出其内容,还是另一个类应该这样做
- 将指针值分配给另一个指针值.我做错了吗
- 我正在做减法游戏(NIM)程序在我的一个练习中,它要求我在主循环周围进行另一个循环
- 我需要做些什么才能使odeint集成函数在另一个类中编译
- 我想用RapidJSON编辑一个文件,但当我这样做时,文件不会被保存
- 为什么要做两个函数?(一个是非const,另一个是const)
- 为什么一个函数声明在另一个函数中编译,它做什么
- 如果一个引用一旦被初始化为一个对象,它就不能被改变,为什么这样做呢?
- 我想将一个文件夹的文件的变量访问到另一个文件夹中的文件..我怎么能那样做
- 为什么一个循环在C++中这样做
- 我可以在调用另一个构造函数之前做一些处理吗?
- cd到另一个目录中,然后在那里做一些事情