在我的项目中,我有IAcquirer.h
个文件,文件内容如下所示
class IAcquirer {
public:
IAcquirer() {}
virtual ~IAcquirer() {}
virtual int initAcquirer(std::string ) = 0;
virtual int processTransactionToHost(const transaction::Transaction &tr, transaction::TransactionDataContainer &txnDataContainer) =0;
virtual int connect(bool) =0;
virtual int disconnect(void) =0;
};
现在在另一个名为system.cpp
的文件中,创建了类IAcquirer
的对象
boomer::host::IAcquirer *pAcquirer;
pAcquirer->processTransactionToHost(****,***);
但是根据我的理解,我们无法创建抽象类的对象,现在该对象正在其他文件中创建
答案 0 :(得分:3)
您的理解是正确的,您无法创建抽象类的对象。
但是,您可以创建从抽象类派生的对象。这些对象与它们的基本抽象类兼容,并且可以通过指针或作为抽象基类的引用来操作。
例如,这是有效的:
class RealAcquirer : public IAcquirer {
virtual int initAcquirer(std::string ) {
cout << "hello" << endl;
return 0;
}
... // Other pure virtual member functions implememted here
};
IAcquirer *make() {
return new RealAcquirer();
}
一旦获得指向IAcquirer
的指针,就可以通过它调用任何IAcquirer
的成员函数,包括在派生类中重写的纯虚拟成员函数。