它是否为O.K.设计如果我从基类成员函数返回Derived类的实例(使用新的Derived()创建)?从基类成员函数返回派生类的实例
此外,这涉及到需要转发声明Derived类,并也使派生类构造函数公开。
代码示例: -
Class Base
{
public:
Base() {}
Derived* get_new_derived(int X)
{
Derived *der = new Derived(X);
return der;
}
}
Class Derived : public Base
{
private:
int _X;
protected:
Derived(int X) { _X = X; }
public:
Derived* get_new_derived(int X)
{
Derived *der = new Derived(X);
return der;
}
}
我还有一个派生类(说Derived1)。现在让我们假设: -
Usage1:
Derived1* der1 = new Derived1();
Derived * der = der1->get_new_derived(10);
Usage2:
Derived1* der1 = new Derived1();
Base* bs = der1;
Derived * der = bs->get_new_derived(10);
你能成为一个更具体一点(理想情况下表现出预期的界面和使用量小的代码示例)?例如,你的意思是返回一个新的Derived()类型为'Base *'还是'Derived *'?在现代C++中,你绝对不应该使用拥有的原始指针 - 使用一个像[[std :: unique_ptr]](http://en.cppreference.com/w/cpp/memory/unique_ptr)或['boost :: shared_ptr'](http://www.boost.org/doc/libs/1_55_0/libs/smart_ptr/shared_ptr.htm)。 – Angew
这是目前的形式无法回避的。你有工作代码,你问这是否是一个好的解决方案,但我们不知道这个激励问题。 – Potatoswatter
看看这个线程中的注释http:// stackoverflow。com/questions/15611959 /使用返回类型作为指针派生类 – manlio