参考此问题:C++ virtual function return typeC++虚拟方法返回不同的派生类型
让我们考虑以下一组对象。
class ReturnTypeBase
{
};
class ReturnTypeDerived1 : public ReturnTypeBase
{
public:
int x;
};
class ReturnTypeDerived2 : public ReturnTypeBase
{
public:
float y;
};
class Base
{
public:
virtual ReturnTypeBase* Get() = 0;
};
class Derived1: public Base
{
public:
virtual ReturnTypeDerived1* Get()
{
return new ReturnTypeDerived1();
}
};
class Derived2: public Base
{
public:
virtual ReturnTypeDerived2* Get()
{
return new ReturnTypeDerived2();
}
};
这些对象可以通过以下方式使用吗?
Base* objects[2];
objects[0] = new Derived1();
objects[1] = new Derived2();
ReturnTypeDerived1* one = objects[0]->Get();
ReturnTypeDerived2* two = objects[1]->Get();
我假设既然返回类型是协变(?),那上面的对象是合法的C++。相应的Get()方法会被调用吗?可以指派一个/两个指针的Get()方法的返回值而不需要转换吗?
你是不是指'ReturnTypeDerived1 * one = objects [0] - > Get();'? – wally
@flatmouse是的,几乎得到了编辑。:D –
你有一个使用案例? – curiousguy