【问题标题】:Input/Output and classes输入/输出和类
【发布时间】:2018-04-25 20:16:33
【问题描述】:

我最近看了几个关于 C++ 的视频。在视频中,这个人说通常你不想在课堂上使用输入/输出。有人可以详细说明为什么吗?是这个人在说什么,还是编程中的某种标准?相反,他正在使用

投掷

而不是 cout/print/printf。

基本上视频说你不应该在类中使用输入/输出。这是行业标准吗?如果有,为什么?

【问题讨论】:

  • 我想他指的是错误处理?因此,与其在屏幕上写东西,不如抛出一个异常,让调用者以某种适当的方式处理错误。请发布一些示例代码,它会更容易回答。正如所写,这个问题不明确且过于宽泛。
  • @wally 抱歉,这只是一个类,如果说“数组为空”,则数组为空。尽管他使用了 Throw 而不是 cout。它只是一个带有可以动态更改的指针的类。但他说一般来说你不应该在对象中使用输入或输出。所以我认为这意味着情况并不重要。我目前正在使用移动设备,所以我会在使用计算机时发布一个示例。
  • 问题缺少数据。

标签: c++ coding-style standards


【解决方案1】:

为可重用性而设计的类不应该对它们的使用位置做出太多假设。想象一下,你创建了一个 C++ 类来封装一个文件的想法,比如:

class CFile {
public:
    CFile(const char* path);
    void rename(const char* new_path);
    std::vector<char> get_content();
};

这个类是高度可重用的。今天,它可以在控制台应用程序中使用,可以将信息写入标准输出。明天,它可能会在 GUI 应用程序中使用,在这种应用程序中写入标准输出没有任何意义。 rename() 方法在出错时抛出异常可能比写入标准输出更有意义。客户端应用程序(控制台与 GUI)然后可以选择处理错误,但他们选择。

然而,在实践中,您会发现大多数系统都是可重用类(可以轻松地从一个应用程序中提取并在另一个应用程序中使用的类)和专注类(旨在处理特定于程序的用例)。一个专注的类可能最好假设它的用例,在这种情况下,它应该可以随意写入标准输出。例如,您的 main() 方法可能只是如下所示:

int main(int argc, char* argv[]) {
    CMyApplication application;
    return application.run(argc, argv);
}

在这种情况下,您的应用程序的所有功能都可能在类中,并且所有应用程序的“控制器”或“驱动程序”都是类CMyApplication。如果合适的话,这个类可以写到标准输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    相关资源
    最近更新 更多