簡體   English   中英

嵌套類變量調用

[英]Nested Classes variable calls

我想離開這個: 在此輸入圖像描述

對此: 在此輸入圖像描述

我該怎么做? 子類square和rectangle的函數如何知道使用父類形狀的變量?

我如何設置主要的長度和寬度?

#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;
            }
      };

};

那些不是子類 (即派生類),而是嵌套類(如問題的標題所示)。

如果我告訴你如何在嵌套類中看到這些變量,我認為我不會回答你真正的問題。 根據我可以從類的名稱中理解的內容,您應該使用繼承來建模它們之間的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();
}

我推薦其他(更好的?!)格式:

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();
}

或者使用具有虛函數的界面

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM