0

我想从这个出发: 在此处输入图像描述

对此: 在此处输入图像描述

我该怎么做?子类 square 和 rectangle 的函数如何知道使用父类 shape 的变量?

我将如何设置主要的长度和宽度?

#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

这些不是子类(即派生类),而是嵌套类(如您的问题标题所述)。

如果我要告诉您如何使这些变量在嵌套类中可见,我认为我不会回答您的真正问题。根据我从您的类名称中可以理解的内容,您应该使用继承来建模它们之间的 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 回答
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 回答