2014-02-09 85 views
0

有人可以告诉,在这段代码中,如何声明构造函数,使得当对象被实例化时,height被初始化为传递值,而width始终是默认值(在下面的情况下为2)。构造函数中的成员初始化

class rectangle{ 
    int width, height; 
public: 
    // rectangle(int w = 1, int h = 1): width(w), height(h){} 
    rectangle(int w = 2, int h=1): width(w) {height = h;} 
    int getW(){return width;} 
    int getH(){return height;} 
}; 
int main() 
{ 
    rectangle r1(1); 
    rectangle r2(2); 
    rectangle r3(4); 
    rectangle r4(5); 
    cout << "w = " << r1.getW() <<" h = " << r1.getH() << endl; 
    cout << "w = " << r2.getW() <<" h = " << r2.getH() << endl; 
    cout << "w = " << r3.getW() <<" h = " << r3.getH() << endl; 
    cout << "w = " << r4.getW() <<" h = " << r4.getH() << endl; 
} 
Output with above code: 
w = 1 h = 1 
w = 2 h = 1 
w = 4 h = 1 
w = 5 h = 1 

有人可以告诉我如何声明构造函数,以便输出如下(我想声明只有一个参数的对象)?

w = 1 h = 1 
w = 1 h = 2 
w = 1 h = 4 
w = 1 h = 5 

回答

3

您的问题的措词有点不清楚。这听起来像你想完全忽略宽度参数,只是使宽度2,而高度是可选的,默认为1。如果是这样的话,那么你可以简单地这样做:

rectangle(int, int h=1) :width(2), height(h) {} 

但我的头脑阅读能力告诉我,这不是你想要的(主要是因为这是一个愚蠢的事情)。我有你只是措辞你的问题错了一种预感,那你真正想要的东西是这样的:

rectangle(int w, int h) :width(w), height(h) {} // handles 2 arguments 
rectangle(int h=1) :width(2), height(h) {}  // handles 0 or 1 arguments 

这种配置允许三个呼叫签名。

  • 2个参数,首先是宽度,第二个是高度。
  • 1的说法,都到高度,和宽度变为2个
  • 0参数,宽度为2,高度为1
+0

感谢本杰明,你是正确的,我的措辞是混乱的。我正在从一个在线讲座系列中学习,并且真的很想了解成员如何初始化,所以这主要是一个理论练习。一般来说,我想学习的是当有多个参数时,如何使用默认值初始化第一个参数(本例中为宽度)。我所有的构造函数组合似乎都将这个值传递给了宽度,在默认情况下保持高度。那有意义吗? – kaushal

+0

@ kaushal98:是的,这是有道理的。但是,这不可能,只有一个功能。然而,你可以用多个重载来模拟它,这就是我的答案所展现的。 –

+0

@Banjamin:抱歉不小心删除了我之前的评论。我想这是不可能的,甚至是愚蠢的,但我仍然想确认。我们能否定义这样的结构,使得当像矩形r1(1),r2(2),r1设置w和r2设置h时实例化? – kaushal

相关问题