在此代码中,有人可以告诉我们如何声明构造函数,以便在实例化对象时,使用传递的值初始化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
答案 0 :(得分:3)
你问题中的措辞有点不清楚。听起来你想要完全忽略width参数,只需要设置宽度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
此配置允许三个呼叫签名。