我有一个要保存抽象类对象的类。
class myClass
{
abstractClass abstractObject; //won't work since abstractClass is abstract
// ....
}
其中abstractClass
是抽象基类。然后,我可能会有一个非抽象的derivedClass1
和derivedClass2
,它们都继承自abstractClass
。我想将这些派生类传递到myClass
中。我该如何使用右值?
我希望能够说
myClass someOBJ(derivedClass1(x, y, z));
myClass someOtherOBJ(derivedClass2(x,y,z));
,然后这两个对象现在保存着derivedClass1
和derivedClass2
类型的对象。
答案 0 :(得分:0)
也许您应该使用指向abstractClass* ptr;
之类的对象的指针,并编写一个接受myclass::myclass(abstractClass&& rval)
之类的右值的构造函数
答案 1 :(得分:0)
如果要保留多态性,则需要使用指针或对abstractClass
中myClass
的引用。
使用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
}