在C ++中,是否有可能以这样的方式构建一个构造函数,比如我有一个包含5个参数的对象:double P1
,double P2
,double P3
,{{1 }},double P4
,我可以让我的构造函数以这样的方式工作,如果我说:
boolean P5
,然后将param1分配给P1,将param2分配给P2,将P3和P4分配给0,将P5分配给true
如果我这样做:
MyObject (double param1, double param2, true)
,然后param1分配给P3,param2分配给P4,P1和P2分配给0,P5分配给假?
即,使用的构造函数基于传入的最后一个参数的值?
答案 0 :(得分:2)
您可以拥有多个构造函数
C(double P1, double P2, double P3, double P4)
: m_P1(P1), m_P2(P2), m_P3(0),m_P4(0), m_P5(0) { ; }
C(double P1, double P2)
: m_P3(P1), m_P4(P2) {;}
...
通常使用函数最好不要使用bool来确定行为,因为它会使函数更难以阅读,而是最好将功能分成两部分,以便功能彼此不同。 / p>
PrintAllHtml(bool b)
小于
PrintHtmlHead()
PrintHtmlBody()
以后可能更容易修改。
答案 1 :(得分:1)
是的,您可以拥有多个具有不同签名的构造函数,以及一个基于传递的参数行为不同的构造函数。虽然你可能不想太疯狂,但如果构造函数表现得很奇怪,那么使用你的类的人会很难。
答案 2 :(得分:1)
在构造函数中只有一个if语句
MyObject(double par1, double par2, bool par3)
{
this->p5 = par3;
if(par3)
{
this->p1 = par1;
this->p2 = par2
this->p3 = 0;
this->p4 = 0;
}
else
{
this->p1 = 0;
this->p2 = 0;
this->p3 = par1;
this->p4 = par2;
}
}
答案 3 :(得分:1)
如果true
和false
始终是常量(即,您总是要通过true
或false
,不是一些布尔变量),然后你可以使用模板和专业化来做到这一点。坦率地说,我很难建议。
对我来说,最直接的工作方式就是在ctor中使用if
语句:
MyObject(double P1, double P2, bool b) {
if (b) {
P1_ = P1;
P2_ = P2;
P3_ = P4_ = 0.0;
P5 = true;
}
else {
P3_ = P1;
P4_ = P2;
P1_ = P2_ = 0.0;
P5 = false;
}
}
但是,我认为我会退后一步,更加努力地思考你在做什么。将布尔值作为参数传递通常是一个坏主意,因为它在传达意义方面做得很差 - 即使充其量,MyObject(1, 2, true);
与MyObject(2, 3, false);
的含义也不明显。在你的情况下,它看起来甚至没有平常那么有意义,以至于你需要阅读ctor以获得任何一个人的任何线索。
总结:是的,这是可能的 - 但我真的怀疑这是个好主意。
答案 4 :(得分:1)
这是另一种选择。而不是更改或提供两个,因为这不是你想要做的,而不是在构造函数中使用扩展代码尝试:
MyObject(double param1, double param2, bool param3) {
P5 = param3;
if (P5)
defaultConstructor(param1, param2, 0.0, 0.0);
else
defaultConstructor(0.0, 0.0, param1, param2);
}
void defaultConstructor(double param1, double param2, double param3, double param4) {
P1 = param1;
P2 = param2;
P3 = param3;
P4 = param4;
}
};
这对我来说很简单,有点清洁 - 当然是意见。 很抱歉在评论中指出了明显的内容;)