我试图继承我的一个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等于然后我可以返回广场的面积和周长..
答案 0 :(得分:2)
首先,您应该为Square构造函数添加一个参数,如下所示:
Square(double Side):Rectangle(Side,Side){
// Add additional constructor code here if required
}
关于在构造函数中返回一个值 - 这是一个禁忌,因为构造函数可能不会返回任何内容。
我希望这就是你的意思,因为我很难理解你的问题。
答案 1 :(得分:2)
从现有的类继承是完全没问题的。
然而,你可能想要的是:
class Square: public Rectangle
{
public:
Square(double Side) : Rectangle(Side, Side) { }
};
这样,没有人试图使用矩形方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;
}
答案 2 :(得分:0)
我可能不理解你的问题,但在我看来你只需要在Square()构造函数中添加一个参数。它看起来像这样:
class Square: public Rectangle{
public:
Square(double dimension):
Rectangle(dimension, dimension){
}
};
Square()构造函数中不需要条件语句。创建一个Square必然意味着创建一个长度和宽度相等的Rectangle。