关于继承和多态,有个例子无法实现

飞翔的薄荷 2025-09-25 17:27:12

以下代码需要实现printer printer_imp1  printer_imp2 . 但是一直无法实现,求解决.

#include <vector>
#include <sstream>

int main()
{
    int test[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    std::vector<int> v(test, test + 10);
    std::vector<std::shared_ptr<printer>> ps;

    {
        auto p = std::make_shared<printer_imp1>();
        ps.push_back(p);  //按逗号分割打印
    }

    {
       auto p = std::make_shared<printer_imp12>();
        ps.push_back(p); //按回车分割打印
    }

    for (auto& p : ps)
    {
        p->print(std::cout,test);
        std::stringstream ss;
        p->print(ss, v);      
    }

    getchar();
}

 

...全文
48 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

一个比较取巧的实现方法是,print只在基类printer中实现,派生类printer_imp1、printer_imp2中只提供分隔符,这样就解决了泛型print不能为virtual的问题~

  • 打赏
  • 举报
回复

这题并不好搞,如果用虚函数实现多态,再重载两个print函数实现打印数组、vector,是比较简单的。但是如果要求输入支持任意可迭代类型,就要用模板,而泛型和多态是冲突的,模板函数不能为virtual...

65,201

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧