是否可以在抽象类构造函数的c ++中使用此抽象类的指针作为参数?

时间:2014-04-08 07:45:48

标签: c++ design-patterns tree abstract-class

我有一个表示树项的抽象类。由于这个类已经从另一个(非抽象)类继承,我想在构造函数中使用与基类相同的结构:

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是一个抽象类。那么有可能以另一种方式实现这一目标吗?

2 个答案:

答案 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是一个抽象类”

不正确。

即。没有技术问题。

确实存在设计水平问题,但那是一条不同的鱼。