c ++如何返回当前类的对象类型(继承)

时间:2012-03-05 00:24:54

标签: c++ inheritance

我想做这样的事情:

class A{
public:
    A(int i);

    static A* createWithSpecialCalculation(int a, int b, int c){
      // ...complex calculation here...
      return new A(result_of_calculation);
    }
};

class B:A{
public:
    float m_additionalMember;
};

现在我希望能够致电

B* myB = B::createWithSpecialCalculation(1,2,3);

这有可能吗? 如果是这样,怎么样?

2 个答案:

答案 0 :(得分:1)

怎么样:
只需稍微改变A中createWithSpecialCalculation的定义。

template<typename T>
static T* createWithSpecialCalculation(int a, int b, int c){
  // ...complex calculation here...
  return new T(result_of_calculation);
}

然后你可以去:

B* myB = A::createWithSpecialCalculation<B>(1,2,3);

答案 1 :(得分:0)

这里的继承可能不合适。

相反,请考虑一个免费的模板函数:

template <typename T>
T* createOne(int a, int b, int c) {
   int x = complexCalculation(a,b,c);
   return new T(x);
}

也就是说,无论类型A还是B,构造函数的参数都是相同的;从你希望避免任何代码重复,这听起来像是已经有用的了。

A* myA = createOne<A>(1,2,3);
B* myB = createOne<B>(1,2,3);

考虑shared_ptr<>而不是这些原始指针。