參考此問題: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