C++ c+中重复的构造函数和方法功能+;

C++ c+中重复的构造函数和方法功能+;,c++,C++,也许问题很简单,但是做这样的事情的最佳实践是什么,假设有一个类数据,它必须从文本文件中读取一些信息。如果需要具有以下两个相同行为的选项: Data my_data; my_data.load("file.txt"); 及 如何在不重复代码的情况下实现这些功能 谢谢。通过重用构造函数中的load成员函数,避免代码重复: Data() { // Provide a default constructor } Data(const std::string& fileName) { l

也许问题很简单,但是做这样的事情的最佳实践是什么,假设有一个类数据,它必须从文本文件中读取一些信息。如果需要具有以下两个相同行为的选项:

Data my_data;
my_data.load("file.txt");

如何在不重复代码的情况下实现这些功能


谢谢。

通过重用构造函数中的
load
成员函数,避免代码重复:

Data() { // Provide a default constructor
}
Data(const std::string& fileName) {
    load(fileName);
}
void load(const std::string& fileName) {
    ... // Load the file
}

通过重用构造函数中的
load
成员函数避免代码重复:

Data() { // Provide a default constructor
}
Data(const std::string& fileName) {
    load(fileName);
}
void load(const std::string& fileName) {
    ... // Load the file
}

可以声明2个构造函数(称为重载)


然后,您可以只定义一次加载函数。

您可以声明2个构造函数(称为重载)


然后,您可以只定义一次加载函数。

只需在构造函数中调用加载方法,这取决于您使用的是什么。如果您还没有加载某些内容,我将假设
数据
是无用的,因为这是最常见的场景。在这种情况下,不提供默认构造函数更安全,因为这样可以在编译期间捕获未初始化的使用错误。否则,所提供的构造函数调用load的答案就是您所需要的。谢谢大家的回答。如果load是在构造函数之后定义和实现的,它可以工作,尽管我不明白为什么。只需在构造函数中调用load方法,这取决于您使用的是什么。如果您还没有加载某些内容,我将假设
数据
是无用的,因为这是最常见的场景。在这种情况下,不提供默认构造函数更安全,因为这样可以在编译期间捕获未初始化的使用错误。否则,所提供的构造函数调用load的答案就是您所需要的。谢谢大家的回答。如果load是在构造函数之后定义和实现的,那么它可以工作,尽管我不理解为什么。
Data()
{
}
Data(string fileName)
{
    load(fileName);
}