0

私はこれから行きたい: ここに画像の説明を入力

これに: ここに画像の説明を入力

どうすればいいですか?サブクラスの正方形と長方形の関数は、親クラスの形状の変数を使用することをどのように認識しますか?

メインから長さと幅を設定するにはどうすればよいですか?

#include <iostream>
#include <cmath>
using namespace std;

class SHAPES
{
      public:
      class SQUARE
      {
            int perimeter(int length, int width)
            {
                return 4*length;
            }
            int area(int length, int width)
            {
                return length*length;
            }
      };
      public:
      class RECTANGLE
      {
            int perimeter(int length, int width)
            {
                return 2*length + 2*width;
            }
            int area(int length, int width)
            {
            return length*width;
            }
      };

};
4

2 に答える 2

1

他の(より良い?!)形式をお勧めします:

class Shape
{
protected:
    int length,width;
public: 
    Shape(int l, int w): length(l), width(w){}
    int primeter() const
    {
        return (length + width) * 2;
    }
    int area() const
    {
        return length * width;
    }
};

class Rectangle : public Shape
{
public
    Rectangle(int l, int w) : Shape(l,w){}
};

class Square : public Shape
{
public:
    Square(int l): Shape(l,l){}
};


int main()
{
    Rectangle r(5,4);
    Square s(6);

    r.area();
    s.area();
}

または、仮想関数でインターフェイスを使用します。

于 2013-02-24T16:24:01.337 に答える
1

これらはサブクラス(派生クラス)ではなく、ネストされたクラスです(質問のタイトルが示すように)。

ネストされたクラスでこれらの変数を表示する方法を教えたとしても、あなたの本当の質問には答えられないと思います。クラスの名前から理解できることに基づいて、継承を使用してクラス間の IS-A 関係をモデル化する必要があります。

class SHAPE
{
public: // <-- To make the class constructor visible
    SHAPE(int l, int w) : length(l), width(w) { } // <-- Class constructor
    ...
protected: // <-- To make sure these variables are visible to subclasses
    int length;
    int width;
};

class SQUARE : public SHAPE // <-- To declare public inheritance
{
public:
    SQUARE(int l) : SHAPE(l, l) { } // <-- Forward arguments to base constructor
    int perimeter() const // <-- I would also add the const qualifier
    {
        return 4 * length;
    }
    ...
};

class RECTANGLE : public SHAPE
{
    // Similarly here...
};

int main()
{
    SQUARE s(5);
    cout << s.perimeter();
}
于 2013-02-24T16:20:33.623 に答える