我有一个表示树项的抽象类。由于这个类已经从另一个(非抽象)类继承,我想在构造函数中使用与基类相同的结构:
class TreeItem //already given class
{
public:
TreeItem(TreeItem *parent = 0);
...
};
class AbstractTreeItem : public TreeItem //class with some abstract methods
{
public:
AbstractTreeItem(TreeItem *parent = 0);
...
};
但是我想确保所有继承我的抽象类的类也只有AbstractTreeItem的子类。因此,我想使用如下构造函数:
class AbstractTreeItem : public TreeItem
{
public:
AbstractTreeItem(AbstractTreeItem *parent = 0);
...
};
这是不可能的,因为AbstractTreeItem是一个抽象类。那么有可能以另一种方式实现这一目标吗?
答案 0 :(得分:0)
所以,你可能会有一个非抽象类:
class NonAbstractTreeItem : public AbstractTreeItem
{
public:
NonAbstractTreeItem(AbstractTreeItem *parent = 0): AbstractTreeItem(parent) {
...
}
...
};
将调用AbstractTreeItem构造函数。
如果要强调构造函数仅用于从子类调用,则可以使其受保护:
class AbstractTreeItem : public TreeItem
{
protected:
AbstractTreeItem(AbstractTreeItem *parent = 0);
...
};
答案 1 :(得分:0)
“这个[使用
AbstractTreeItem*
参数]是不可能的,因为AbstractTreeItem是一个抽象类”
不正确。
即。没有技术问题。
确实存在设计水平问题,但那是一条不同的鱼。