-1

我正在尝试从我的 2 类变量之一继承,它们必须相等才能返回另一个类中我的一个函数的值..

class Rectangle: public Shape{

    double Length;
    double Width;

    public:
        Rectangle(double Length, double Width):
            Shape("Rectangle")
        {
            this->Length=Length;
            this->Width=Width;
        }

        double getPerimerter(){
            return 2 * (Length+Width);
        }

        double getArea(){
            return Length * Width;
        }
};

class Square: public Shape, public Rectangle{

    double Side;

    public:
    Square():
        Shape("Square"),
        Rectangle(Length,Width)
    {}

    double getPerimerter(){
        if(Length==Width)
        return 4 * (Length+Width);
    }

    double getArea(){
        if(Length==Width)
        return (Length+Width) * (Length+Width);
    }

};

如您所见,我已经有一个名为 Rectangle 的具体类,它保存名称为 Length 和 Width 的私有变量。我要做的是将该类继承到我的类 Square 并且如果 Length 和 Width 相等,那么我可以返回正方形的面积和周长..

4

3 回答 3

2

首先,您应该向 Square 构造函数添加一个参数,如下所示:

Square(double Side):Rectangle(Side,Side){
    // Add additional constructor code here if required
}

关于在构造函数中返回一个值——这是不行的,因为构造函数可能不会返回任何东西。

我希望这就是您的意思,因为您的问题对我来说很难理解。

于 2013-08-05T23:29:36.110 回答
2

从现有类继承是非常好的。

但是,您可能想要的是:

 class Square: public Rectangle
 {
    public:
       Square(double Side) : Rectangle(Side, Side) { }
 };

这样,就没有人试图使用 ractangular square 的问题Square(4.3, 9.6)

或者,您当然可以使用typedef Rectangle Square;

编辑:

为了克服“名称”,我们可以这样做:

class Rectangle
{
    public:
       Rectangle(double Length, double Width) : Shape("Rectangle") { ... } 
    protected:
       Rectangle(double Length, double Width, const char *name) : Shape(name), Length(Length), Width(Width) {}
};

class Square
{
  public:
   Square(double side) : Rectangle(side, side, "Square") {}
};

Edit2:我想出的代码:

#include <iostream>

using namespace std;


class Shape
{
private:
    const char *name;

public:
    Shape(const char *name) : name(name) {}
    virtual double getPerimeter() = 0;
    virtual double getArea() = 0;
};


class Rectangle: public Shape{

    double Length;
    double Width;

    public:
        Rectangle(double Length, double Width):
            Shape("Rectangle")
        {
            this->Length=Length;
            this->Width=Width;
        }

        double getPerimeter(){
            return 2 * (Length+Width);
        }

        double getArea(){
            return Length * Width;
        }

protected:
    Rectangle(double Length, double Width, const char *name):
            Shape(name)
        {
            this->Length=Length;
            this->Width=Width;
        }

};

class Square: public Rectangle
{

    public:
    Square(double Side):
        Rectangle(Side,Side, "Square")
    {    
    }
};

int main()
{
    Square sq(10.0);
    Rectangle rect(12.0, 4.0);

    cout << "sq:" << sq.getArea() << " rect:" << rect.getArea() << endl; 
}
于 2013-08-05T23:31:36.603 回答
0

我可能不明白你的问题,但在我看来你只需要向你的 Square() 构造函数添加一个参数。它看起来像这样:

class Square: public Rectangle{

    public:
        Square(double dimension):
            Rectangle(dimension, dimension){
        }

};

Square() 构造函数中不需要条件语句。创建一个正方形必然意味着创建一个长度和宽度相等的矩形。

于 2013-08-05T23:32:18.330 回答