具体类中包含的抽象类

时间:2014-07-21 12:05:11

标签: c++ oop constructor abstract-class

我有一个类,其中包含另一个类的成员。第二类是一个抽象类,由一系列子类中的一个以通常的方式具体化。 我不确定构建全包类的最佳方法,当然,当构造它时,将抛出错误,因为它将尝试构造一个缺少其某些方法定义的类。有人可以建议最好的解决方法吗? 干杯, 千斤顶

编辑1:类图:

                 Main Class
                      |
       ------------------------------------
       |                                  |
Normal Methods/Members             Abstract Class member
                                          |
                            -----------------------------
                            |                           |
                     Concrete Class 1           Concrete Class 2

所以'主要班级'是我担心的结构,因为当它被调用时,抽象类成员需要以某种方式具体化,但我不确定如何做到这一点。

2 个答案:

答案 0 :(得分:1)

给定一个抽象类A和两个实现BCenc应该包含它们,我可以想到两个解决方案:

第一个unique_ptr Aenc看起来像:

struct enc{
    unique_ptr<A> a;
    int x;
    enc(unique_ptr<A> p): a(std::move(p)), x(0) {
    }       
};

演示here

我碰巧想到的第二个解决方案,我不确定是一个好主意,但我会发布为了多功能性(或者发现它是否有我没想到的缺陷) 。在案例A中使用模板,B是一些默认的可构造类

template <class T>
struct enc{
    T in; // should be private, I'm just lazy :)
    A &a; 
    int x;
    enc(): in(T()), a(in), x(0) {
    }       
};

(假设op需要某种指针或对enc中的父类的引用)

演示here

答案 1 :(得分:0)

我不完全确定我是否理解你的意思,但在我看来,你可以使用指针或对抽象类的引用,然后用一个具体的类初始化它。

这样的东西
class MainClass
{
    class AbstractClass
    {
    public:
        virtual void SomeFunction() = 0;
        ...
    };

    class ConcreteClass : public AbstractClass
    {
    public:
        ConcreteClass() {}
        void SomeFunction() { ... }
        ...
    };

    AbstractClass* pAbstractClass;

public:
    MainClass()
        : pAbstractClass(new ConcreteClass)
    {}

    virtual ~MainClass()
    {
        delete pAbstractPointer;
    }

    ...

    void AnotherFunction()
    {
        pAbstractClass->SomeFunction();
    }
};

只需创建一个继承自抽象基类的具体类的实例,并指定给抽象类的指针。