【发布时间】:2015-07-10 14:22:03
【问题描述】:
我遇到了这个问题,不知道怎么解决。
假设我有这些基类:
class ValueBase
{
private:
int base_value;
public:
int GetValue();
void SetValue(int val);
virtual ValueBase* Meet(ValueBase* const a, ValueBase* const b) = 0;
}
class NodeBase
{
private:
ValueBase* base_nodeValue;
public:
bool AddValue(int val);
}
和派生类:
class Value : public ValueBase
{
public:
Value* Meet(ValueBase* a, ValueBase* b) override;
}
有没有办法在类NodeBase 中的方法AddValue 中创建类Value 的实例?我知道我可能应该将AddValue 设为纯虚拟并在NodeBase 的派生类中实现它,但是如果没有这个选项,是否有可能做到这一点?我可以使用例如模板方法或者可能是 Value 中将构造该对象的方法的回调?还是这样做太邪恶了?
编辑:
我无权访问 NodeBase 类中的派生类 Value
【问题讨论】:
-
bool AddValue(int val) { base_nodeValue = new Value; }繁荣,完成。 -
对,我错过了一次,请查看编辑。
-
你不能转发声明
Value,或者包含正确的标题以便在NodeBase中使用它吗? -
@JonathanPotter 将此作为答案,以便可以接受
-
问题的标题是错误的和误导性的,它暗示你想创建一个抽象类的实例,这当然是不可能的。您想创建一个派生类的实例的事实 from 一个抽象类是无关紧要的,你可以说“创建派生类的实例”,因为这就是你想要做的,它不会基础是否抽象的区别。
标签: c++ oop inheritance abstract-class instantiation