C++从一个具体的类继承到另一个具体类
C++ inherit from a concrete class to another concrete class
我正试图从我的类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相等,那么我可以返回Square的Area和Perimeter。。
从现有类继承是非常好的。
然而,你可能想要的是:
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") {}
};
第二版:我想出的代码:
#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;
}
首先应该向Square构造函数添加一个参数,如下所示:
Square(double Side):Rectangle(Side,Side){
// Add additional constructor code here if required
}
关于在构造函数中返回值-这是不可行的,因为构造函数可能不会返回任何内容。
我希望这就是你的意思,因为你的问题对我来说很难理解。
我可能不理解你的问题,但在我看来,你只需要向Square()构造函数添加一个参数。它看起来是这样的:
class Square: public Rectangle{
public:
Square(double dimension):
Rectangle(dimension, dimension){
}
};
Square()构造函数中不需要条件语句。创建正方形必然意味着创建长度和宽度相等的矩形。
相关文章:
- 如何从另一个文件继承私有成员变量和公共函数
- 为什么我不能在主函数之外定义一个类的对象(它继承了另一个类)?
- 在一个类中使用另一个类中的函数,而不在 c++ 中使用继承
- 从抽象类继承以创建另一个抽象类时,我应该重新声明所有虚函数吗?
- 有没有办法C++将给定类的功能限制为仅另一个类(不使用继承,朋友)?
- 继承:访问另一个类的私有和公共部分
- 在 c++ 中,当一个类继承头文件中的另一个类时出错
- 继承一个类,该类继承另一个已包含的类
- C++:对于继承多个类的类,如何从一个类继承某些属性,从另一个类继承其他属性?
- 是否可以从另一个类对象调用一个类函数而不继承第一个类
- 从另一个部分专用模板类继承部分专用模板类
- 是否可以定义一个在外部"C"块中继承另一个结构的结构?
- 如何允许一个类由另一个类创建而不使用'friend'但允许继承?
- 为什么当一个模板类继承自另一个模板类时,需要重新指定 typedef 并限定函数调用?
- 在另一个项目中包括继承的类时,抽象类的链接器错误
- 模板继承另一个模板
- C++ 继承另一个库中的库异常,以将它们传递给调用代码
- 搜索继承另一个类的c++类
- 如何设置一个元表来继承另一个元表,同时将userdata更改为另一种类型?
- 继承另一个具有相同函数名的抽象类的抽象类