C++如何实现同一个print函数既支持cout输出又支持写入文件
解决方案
有两种简单的实现方式可以同时满足两种调用需求:
方式1:使用函数重载(代码冗余度最低)
保留两个版本的print成员函数,无参版本直接调用带参版本并传入标准输出流,无需重复写遍历逻辑:
#include <iostream> #include <fstream> // 带输出流参数的版本 template <class T> void ArrayList<T>::print(std::ostream& os) const { for (int i = 0; i < length; i++) { os << *(list + i) << '\n'; } } // 无参版本,默认输出到标准输出 template <class T> void ArrayList<T>::print() const { print(std::cout); }
这里参数类型用std::ostream&而非std::ofstream&,兼容性更强,除了文件流之外也支持传入字符串流std::stringstream等其他标准输出流类型
方式2:使用默认参数(仅需写一个函数)
给输出流参数设置默认值为std::cout,无参调用时自动使用默认值:
#include <iostream> #include <fstream> template <class T> void ArrayList<T>::print(std::ostream& os = std::cout) const { for (int i = 0; i < length; i++) { os << *(list + i) << '\n'; } }
使用时两种调用方式都可以正常生效:
ArrayList<int> arr; // 无参调用,输出到控制台 arr.print(); // 传文件流参数,输出到文件 std::ofstream outFile("output.txt"); arr.print(outFile);
内容的提问来源于stack exchange,提问作者Aman
相关产品推荐
相关产品推荐

