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){}
    。一般形状上的半径到底是什么意思?也许你需要重新考虑你的课堂设计。