我有2个类:A(基础)和B(派生)。我需要帮助编写B的构造函数,其中A的成员需要初始化。
class A
private:
std::string name;
int a;
int b;
int c;
public:
A(std::string n) : name(n) {};
A(std::string n, int aa, int bb, int cc) : name(n), a(aa), b(bb),
c(cc) {};
...
};
class B : public A {
private:
int d;
int e;
public:
B(std::string n, int aa, int bb, int cc,
int dd, int ee) : A(n, aa, bb, cc) //here comes the question
{
d=dd; e=ee;
}
};
在B类的第二个构造函数中,它使用给定值aa,bb,cc初始化类A的成员;如果没有给出这些值,我希望A类获得其成员的随机数:
B(std::string n, int dd, int ee) : A(n, (rand%10)+1, (rand%10)+1,(rand%10)+1)
{
d=dd;
e=ee;
}
有没有更好的方法来实现它?在我的实际例子中,我在A类中有更多成员,并且使用列表初始化器语法不方便。
P.S。不确定呈现的变体是否会正常工作,因为我需要包含某个srand(time(NULL))事物...
答案 0 :(得分:2)
您还可以为A实现一个(protected
)构造函数,将成员初始化为随机值,然后在构造函数中为B调用它。
如果向A添加(受保护的)类(例如,将其称为RandomInit
),则可以将此作为新创建的构造函数的参数,以使调用无人值守。课程本身当然是空的。
答案 1 :(得分:1)
将随机数生成移动到A
的构造函数中,e。 G。通过将第一个表单扩展到A(std::string n, bool fillRandom = false)
并在fillRandom == true
时进行生成。 B
的来电似乎是
B(std::string n, int dd, int ee) : A(n, true) { ...