0

このコードで、オブジェクトがインスタンス化されたときに高さが渡された値で初期化され、幅が常にデフォルト (以下の場合は 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

出力が次のようになるようにコンストラクターを宣言する方法を誰かに教えてもらえますか (パラメーターを 1 つだけ使用してオブジェクトを宣言したい)。

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

1 に答える 1

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

この構成では、3 つの呼び出し署名が許可されます。

  • 2 つの引数。1 つ目は幅、2 つ目は高さです。
  • 1 つの引数。これは高さになり、幅は 2 になります
  • 引数が 0 の場合、幅は 2 になり、高さは 1 になります
于 2014-02-09T00:17:34.807 に答える