【发布时间】:2013-03-10 03:04:42
【问题描述】:
我有一个名为 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 in constructor B? 如果不是,这似乎太多余了,我相信有更好的方法来解决这种多余的问题。
【问题讨论】:
-
你确定构造函数有足够的参数吗?或许加点?
-
委托构造函数或默认参数。
-
为什么不直接编写一个名为
initialise的私有函数并在构造函数中使用它? -
@Rubby:考虑Named Parameter Idiom。和类似的想法。
-
@Rubby
initialize函数的问题是它实际上不能进行初始化,只能赋值。
标签: c++ qt class object constructor