两个类之间的共享方法

时间:2018-06-25 09:31:13

标签: c++ database qt oop

我试图在两个类之间共享一个方法,每个类都使用其私有属性,如下所示:

class DbWriter {
public:
    int GetIdFromDB(QString codVEI)        //<! uses mDbWriteQuery
private:
    QSqlQuery mDbWriteQuery;
}


class DbReader {
public:
    int GetIdFromDB(QString codVEI)        //<! uses mDbReadQuery
private:
    QSqlQuery mDbReadQuery;
}

我想做类似朋友方法的事情,但是每个人都知道他们自己的属性成员,而不必创建一个类并从中继承这两个类,因为在我的情况下这是行不通的。

2 个答案:

答案 0 :(得分:1)

如果您想共享一个实现,只需使用一个通用的免费功能:

val yourData = listOf<DataToUpdate>()
BatchUpdateStatement(FooTable).apply {
    yourData.forEach {
        addBatch(it.id)
        this[FooTable.name] = it.name
        this[FooTable.column] = it.field
    }
    execute(Transaction.current())
}

在两个类中都包含/链接它,并让它们调用它。

将查询作为参数传递,因为不会在混合中引入友谊,从而避免了无意义的耦合。

答案 1 :(得分:0)

我会使用多态类来做到这一点。例如

class DbObject
{
public:
  virtual int GetIdFromDB(const QString &codVEI) = 0;
private:
  QSqlQuery mQuery;
};

class DbWriter : public DbObject
{
public:
  int GetIdFromDB(const QString &codVEI) override;
};

class DbReader : public DbObject
{
public:
  int GetIdFromDB(const QString &codVEI) override;
};

用法:

auto dbObject = std::make_shared<DbWriter>();
int id = dbObject->GetIdFromDB("foo"); // Calls write query

dbObject = std::make_shared<DbReader>();
id = dbObject->GetIdFromDB("foo"); // Calls read query

更新

修复了DbReader类声明-它也应该从DbObject类派生。