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 可以写入它想要的所有内容,如果这样做合适的话。
我最近看了一些关于 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 可以写入它想要的所有内容,如果这样做合适的话。