C ++:如何将派生对象传递到拥有其抽象库的类中?

时间:2018-09-21 18:11:08

标签: c++ oop

我有一个要保存抽象类对象的类。

class myClass
{
abstractClass abstractObject; //won't work since abstractClass is abstract
// ....
}

其中abstractClass是抽象基类。然后,我可能会有一个非抽象的derivedClass1derivedClass2,它们都继承自abstractClass。我想将这些派生类传递到myClass中。我该如何使用右值?

我希望能够说

myClass someOBJ(derivedClass1(x, y, z));
myClass someOtherOBJ(derivedClass2(x,y,z));

,然后这两个对象现在保存着derivedClass1derivedClass2类型的对象。

2 个答案:

答案 0 :(得分:0)

也许您应该使用指向abstractClass* ptr;之类的对象的指针,并编写一个接受myclass::myclass(abstractClass&& rval)之类的右值的构造函数

答案 1 :(得分:0)

如果要保留多态性,则需要使用指针或对abstractClassmyClass的引用。

使用std::unique_ptr<>来实现此目标的正确C ++:

#include <memory>

class AbstractClass
{
public:
    virtual void func() = 0;
};


class DerivedClass : public AbstractClass
{
public:
    void func() {};
};


class myClass
{
    std::unique_ptr<AbstractClass> ptr;

public:
    myClass(AbstractClass* p) : ptr(p) {}
};


int main()
{
    myClass(new DerivedClass());

    return 0;

    //myClass will automatically call delete on the pointer
}