C++ 将参数传递给超类构造函数
我刚刚开始学习派生类,我正在研究著名的C++ 将参数传递给超类构造函数,c++,class,inheritance,constructor,C++,Class,Inheritance,Constructor,我刚刚开始学习派生类,我正在研究著名的Shape类Shape是基类,然后我有三个派生类:Circle、Rectangle和SquareSquare是Rectangle的派生类。我认为我需要将参数从派生类构造函数传递给基类构造函数,但我不确定具体如何做。我想在创建形状时设置形状的尺寸。下面是我对基类和一个派生类的介绍: Shape(double w = 0, double h = 0, double r = 0) { width = w; height = h; ra
Shape
类Shape
是基类,然后我有三个派生类:Circle
、Rectangle
和Square
Square
是Rectangle
的派生类。我认为我需要将参数从派生类构造函数传递给基类构造函数,但我不确定具体如何做。我想在创建形状时设置形状的尺寸。下面是我对基类和一个派生类的介绍:
Shape(double w = 0, double h = 0, double r = 0)
{
width = w;
height = h;
radius = r;
}
class Rectangle : public Shape
{
public:
Rectangle(double w, double h) : Shape(double w, double h)
{
width = w;
height = h;
}
double area();
void display();
};
Rectangle(double w, double h) : Shape(w, h)
{}
我走对了吗?我得到了以下编译器错误:
在每个派生构造函数中,在“double”之前应该有一个主表达式。您必须将形状(double w,double h)
更改为形状(w,h)
。您实际上是在这里调用基构造函数
此外,您不必在派生类的构造函数体中设置宽度
和高度
:
Shape(double w = 0, double h = 0, double r = 0)
{
width = w;
height = h;
radius = r;
}
class Rectangle : public Shape
{
public:
Rectangle(double w, double h) : Shape(double w, double h)
{
width = w;
height = h;
}
double area();
void display();
};
Rectangle(double w, double h) : Shape(w, h)
{}
够了。这是因为在初始值设定项列表中,Shape(w,h)
将调用基类的构造函数(Shape
),它将为您设置这些值
创建派生对象时,将执行以下操作:
已留出形状的内存
调用相应的基构造函数
初始化列表初始化变量
构造函数的主体执行
控件返回给调用方
在您的示例中,Shape
子对象由Shape(double w=0,double h=0,double r=0)
初始化。在此过程中,基础部件的所有成员(宽度
,高度
,半径
)都由基础构造函数初始化。在此之后,将执行派生构造函数的主体,但您不必在此处更改任何内容,因为它们都由基本构造函数处理。。不要在此处重新说明参数:
Rectangle(double w, double h) : Shape(double w, double h)
你应该简单地“传递它们”(用不准确的措辞):
形状构造函数的主体?那么,USER230235是指矩形构造器的主体。对于编译器错误,在调用冒号基类的构造函数之后,必须删除冒号< >代码>双//>代码>(double w,double h)< /c> >,也考虑使用成员初始化器初始化形状成员,非赋值,即使形状构造函数如下所示:形状(双w=0,…):宽度(w)、高度(h)、半径(r){}
。一般形状上的半径到底是什么意思?也许你需要重新考虑你的课堂设计。