C++ C++;类中的多个数据源

C++ C++;类中的多个数据源,c++,interface,C++,Interface,我想知道如何将不同的数据源添加到已经存在的代码中。例如,假设我有一段代码: //DataFromFile.cpp #include "Data.h" class DataFromFile { public: DataFromFile() { filename = ""; } ~DataFromFile() { delete data; } void loadValue(const char *filename) { //getting data from a file

我想知道如何将不同的数据源添加到已经存在的代码中。例如,假设我有一段代码:

//DataFromFile.cpp

#include "Data.h"

class DataFromFile
{
public:
    DataFromFile() { filename = ""; }
    ~DataFromFile() { delete data; }
    void loadValue(const char *filename) { //getting data from a file }
    void printData() { data->printData(); }
private:
    string filename;
    Data *data;
};


//Source.cpp

#include <iostream>
#include "DataFromParameter.h"

int main(int argc, char **argv)
{
    DataFromFile oldData;
    oldData.loadValue("example.txt");
    oldData.printData();

   return 0;
}
如您所见,IData和DataFromParameter是新的类,我还向DataFromFile添加了一些方法。创建新对象并调用其方法:

//Source.cpp

#include <iostream>
#include "DataFromParameter.h"

int main(int argc, char **argv)
{
    //Source: file (the old way)
    DataFromFile oldData;
    oldData.loadValue("example.txt");
    oldData.printData();

    //Source: file (the new way)
    IData *newData1 = new DataFromFile("example.txt");
    newData1->printData();
    delete newData1;

    //Source: parameter
    IData *newData2 = new DataFromParameter(atoi(argv[1]));
    newData2->printData();
    delete newData2;

   return 0;
}
//Source.cpp
#包括
#包括“DataFromParameter.h”
int main(int argc,字符**argv)
{
//来源:文件(旧方式)
数据源文件oldData;
loadValue(“example.txt”);
printData();
//来源:文件(新方式)
IData*newData1=newdatafromfile(“example.txt”);
newData1->printData();
删除新数据1;
//来源:参数
IData*newData2=newdatafromParameter(atoi(argv[1]));
newData2->printData();
删除新数据2;
返回0;
}
它起作用了,但我对它不是很满意;尤其是DataFromFile类代码看起来很混乱——我知道为什么会这样,但我确信其他人会非常困惑其中到底发生了什么


我的问题是:有没有更好的办法?这种草率是必要的(考虑到具体情况),还是我遗漏了一些明显的问题解决方案?

您可能希望将其作为流来实现,这是通常的做法。另外,您的代码也不符合要求。您真的需要所有3个类都从一个公共基础派生吗?您是否可以扩展您认为杂乱无章的内容?我没有看到任何明显的错误,尽管您没有给出
loadValue
所属的实现,为什么不创建自由函数:
datamakedatafromparter(int)
数据MakeDataFromFile(const char*filename)?(或返回
std::unique\u ptr
)。
//Source.cpp

#include <iostream>
#include "DataFromParameter.h"

int main(int argc, char **argv)
{
    //Source: file (the old way)
    DataFromFile oldData;
    oldData.loadValue("example.txt");
    oldData.printData();

    //Source: file (the new way)
    IData *newData1 = new DataFromFile("example.txt");
    newData1->printData();
    delete newData1;

    //Source: parameter
    IData *newData2 = new DataFromParameter(atoi(argv[1]));
    newData2->printData();
    delete newData2;

   return 0;
}