我有一个名为FaultsTablemanager的类,它有两个构造函数:
class FaultsTableManager : public QObject
{
Q_OBJECT
public:
FaultsTableManager(MainWindow* mainW,
QMutex* mu,
QWidget* parentPa,
QTableWidget* tabA,
QRadioButton* sel1,
QRadioButton* sel2,
QQueue<RDIU*>* que,
QTableWidget* tabDe,
QWidget* parentDe,
QLabel* nameLab,
QLabel* timeLab);
FaultsTableManager(MainWindow* mainW,
QMutex* mu,
QWidget* parentPage1,
QTableWidget* tabA,
QRadioButton* sel1,
QRadioButton* sel2,
QList<RDIU*>* list1,
QList<RDIU*>* list2,
QTableWidget* tabDe,
QWidget* parentDe,
QLabel* nameLab,
QLabel* timeLab);
...
}
我想重用第二个中的第一个构造函数,如下所示:
FaultsTableManager::FaultsTableManager(MainWindow* mainW,
QMutex* mu,
QWidget* parentPa,
QTableWidget *tabA,
QRadioButton *sel1,
QRadioButton *sel2,
QList<RDIU*> *list1,
QList<RDIU*> *list2,
QTableWidget* tabDe,
QWidget* parentDe,
QLabel* nameLab,
QLabel* timeLab)
{
FaultsTableManager(mainW,
mu,
parentPa,
tabA,
sel1,
sel2,
NULL,
tabDe,
parentDe,
nameLab,
timeLab);
// table = tabA;
queue = NULL;
list = list1;
errList = list2;
}
但如果我将代码行table = tabA;
注释掉,则成员table
将不会被初始化(以后不能使用)。
所以我认为第一个构造函数的调用不会对对象进行操作,只有新的另一个对象没有存储在我的构造函数中。
但是我在子类中看到了base calss的构造函数的调用,它在同一个对象上运行,这就是我使用这种方法的原因。
那么我可以在constructor A
中重用constructor B
吗? 如果没有,它似乎太多余了我相信有更好的方法解决这种冗余问题。
答案 0 :(得分:1)
这只适用于C ++ 11,即便如此,许多编译器还没有实现该特定功能。 (GCC最近刚刚支持4.7,但我没有亲自测试过)。该功能称为“构造函数委派”或“delegating constructors”。
据我所知,您必须使用Initialize()函数(可能是私有的)来初始化两个构造函数的公共部分。
有关C ++ 11功能的GCC支持状态,请参阅here。 (GCC高达4.8,MinGW现在高达4.7,所以最新的MinGW也有这个功能。)