Input/Output 和 类

Input/Output and classes

我最近看了一些关于 C++ 的视频。在视频中,这个人说通常你不想在 class 中使用 input/output。有人可以详细说明为什么吗?这只是这个人在说什么,还是编程中的某种标准?相反,他使用

Throw

而不是 cout/print/printf。

基本上视频说你不应该在 class 内使用 input/output。这是行业标准吗?如果是,为什么?

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

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

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

然而,在实践中,您会发现大多数系统都是可重用 classes 的混合体(classes 可以很容易地从一个应用程序中取出并按原样用于另一个应用程序)和重点 classes(classes 旨在处理特定于程序的用例)。专注于 class 假设其用例可能更可取,在这种情况下,它应该可以随意写入标准输出。例如,您的 main() 方法可能只是如下所示:

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

在这种情况下,您应用程序的所有功能都可能在 classes 中,并且您所有应用程序的 "controller" 或 "driver" 是 class CMyApplication。这个 class 可以写入它想要的所有内容,如果这样做合适的话。