class A // abstract class
{
protected:
int m_iA;
int m_iB;
int m_iC;
int m_iD;
int m_iE
~A();
};
class B : public A // abstract class
{
protected:
double m_dA;
double m_dB;
double m_dC;
double m_dD;
~B();
};
class C : public B
{
public:
C(int iA, int iB, int iC, int iD, int iE, double dA, double dB, double dC, double dD)
{
}
}
问题>正如您在上面的示例中所看到的,基类A
和B
都包含许多成员变量。将这些初始值从类C
传递到基类的更好的解决方案是什么?
方法1>直接在类C
的构造函数体内分配基类成员变量。
方法2>将所有初始值从C
的构造函数传递到B
,最后传递到A
。
谢谢
答案 0 :(得分:5)
我建议为A和B创建构造函数,让它们获取初始化值,然后应用它们。然后C调用B的构造函数,将值传递给它,依此类推。这样,如果有另一个继承自B或A的类,它将遵循相同的模式,并且可以通过仅具有需要初始化值的构造函数来强制执行。
答案 1 :(得分:2)
为获取初始化值的基类创建构造函数,并在C
的构造函数初始化列表中使用它们。
答案 2 :(得分:2)
使用C ++ 11,您可以获得比预期更少的开销:
class A { // abstract class
protected:
int m_iA;
int m_iB;
int m_iC;
int m_iD;
int m_iE
A(int iA, int iB, int iC, int iD, int iE)
: m_iA(iA), m_iB(iB), m_iC(iC), m_iD(iD), m_iE(iE) {}
~A();
};
class B : public A { // abstract class
protected:
double m_dA;
double m_dB;
double m_dC;
double m_dD;
B(int iA, int iB, int iC, int iD, int iE, double dA, double dB, double dC, double dD)
: A(iA,iB,iC,iD,iE), m_dA(dA), m_dB(dB), m_dC(dC), m_dD(dD) {}
~B();
};
class C : public B {
public:
using B::B;
}
答案 3 :(得分:1)
更好的想法是采用包含初始化值的tuple
,array
或自定义结构,然后在B和A的构造函数中解压缩。然后C的构造函数只需要两个对象。
答案 4 :(得分:0)
首先拥有如此长的构造函数是......不是优选的,但无论如何:无论哪种方式同样有效,我会说这是个人选择的问题。