使用派生的[C++]生成的参数初始化基类

使用派生的[C++]生成的参数初始化基类,c++,inheritance,C++,Inheritance,我有一个情况,我有一些基类,从这个类中我得到了DerivedA和DerivedB。让我们假设Base的c'tor如下所示: Base(int a) : m_a(a) {} 现在的问题是,类DerivedA和DerivedB各自使用一些算法来确定所说的a,所以这样做DerivedA:Basea是不可能的,因为a是在构造函数体中生成的 这种问题有什么解决办法?半构造一个对象总是一个坏主意。要么你不建造它要么你完全建造它 在您的情况下,最好的解决方案是使用自由函数 int complexCalcul

我有一个情况,我有一些基类,从这个类中我得到了DerivedA和DerivedB。让我们假设Base的c'tor如下所示:

Base(int a) : m_a(a) {}
现在的问题是,类DerivedA和DerivedB各自使用一些算法来确定所说的a,所以这样做DerivedA:Basea是不可能的,因为a是在构造函数体中生成的


这种问题有什么解决办法?

半构造一个对象总是一个坏主意。要么你不建造它要么你完全建造它

在您的情况下,最好的解决方案是使用自由函数

int complexCalculation(int a){...}
DerivedA():Base(complexCalculation(a))
{

}
也可以选择使用私有或受保护的静态函数

struct DerivedA{
DerivedA():Base(complexCalculation(a))
{

}
private:
static int complexCalculation(int a){...}
};

半构造一个对象总是一个坏主意。要么你不建造它要么你完全建造它

在您的情况下,最好的解决方案是使用自由函数

int complexCalculation(int a){...}
DerivedA():Base(complexCalculation(a))
{

}
也可以选择使用私有或受保护的静态函数

struct DerivedA{
DerivedA():Base(complexCalculation(a))
{

}
private:
static int complexCalculation(int a){...}
};

您可以创建一个私有静态函数来初始化

如果可能,还可以将Base转换为模板并使用


您可以创建一个私有静态函数来初始化

如果可能,还可以将Base转换为模板并使用


为什么不是一个私有的或受保护的静态函数呢?因为我假设计算可以被共享。但是一个私有的或受保护的静态函数也很好,为什么不是私有的或受保护的静态函数呢?因为我假设计算可以被共享。但是私有的或受保护的静态函数也可以good@Angew我只是注意到,那我就没有办法了this@Angew我只是注意到,我没有解决这个问题的办法