C++ - 构造函数参数被基类构造函数使用

8

我有一个Car类,它继承了Vehicle类。Car和Vehicle类都接受参数“wheels”。从继承的工作原理来看,对象Car将分两个阶段构建:Vehicle将首先通过调用其构造函数进行构建,然后Car也将调用其构造函数。我的问题是,当Vehicle的构造函数使用Car的参数时,我应该如何编写Car的构造函数?

class Vehicle {
public:
    Vehicle(int wheels);
};

class Car {
public:
    Car(int wheels): Vehicle(wheels);
};
5个回答

21
你需要继承自Vehicle:
头文件:
class Car: public Vehicle {
public:
    Car(int wheels);
};

Cpp文件:

Car::Car(int wheels): Vehicle(wheels) {
}

汽车.cpp应该长什么样子?它应该像Car::Car(int wheel) {}这样吗? - user27279
是的,如果你想在头文件中调用Vehicle构造函数。或者你可以在cpp中使用Car::Car(int wheel):Vehicle(wheel) {},并且不在头文件构造函数(声明)中提及Vehicle。 - perreal
所以在我的.h文件中,应该有类Car { public: Car(int wheels);}; - user27279

7
你将轮子传递给车辆构造函数,然后在汽车构造函数中处理附加参数。
class Car : public Vehicle {
public:
    Car(int otherParam, int wheels);
};

Car::Car(int otherParam, int wheels) : Vehicle(wheels) {
    //do something with other params here
}

当然,你可以拥有多个其他参数,并且它们不需要是整数;)编辑:在我最初的示例中,我还忘记了从车辆继承,感谢perreal指出这一点。

哦,我有点傻。car.cpp应该长什么样子呢?它应该像这样吗:Car::Car(int wheel) {}? - user27279
我发布的代码的第二部分(从Car :: Car ...开始)将进入car.cpp。 - Moritz

0

可以选择内联方式:

Car(int wheels) : Vehicle(wheels) { }

或者是离线的:

class Car : public Vehicle {
  Car(int); 
  // ...  
};

Car::Car(int wheels) : Vehicle(wheels) { }

car.cpp应该是什么样子?它应该像Car::Car(int wheel) {}这样吗? - user27279

0

首先,

      class Car:public Vehicle{...

我不确定你所说的“如何编写myCars构造函数”是什么意思。

      Vehicle(int wheels):m_Wheels(wheels)
      {
           // or m_Wheels = wheels;
      }
      ...
      Car(int wheels):Vehicle(wheels)
      {
             if(m_Wheels != 4)
                  fprintf(stdout, "Uh Oh");
      }

在这种情况下,先调用了车辆构造函数,然后调用了汽车构造函数。请注意,我可以在Car中使用Vehicle中初始化的m_Wheels。
这回答了你的问题吗?

0
你要找的是:
Car::Car(int wheels)
:Vehicle(wheels) 
{
 // Do Car constructor specific stuff here.
}

:Vehicle(wheels)将把wheels参数传递给Vehicle构造函数,并按照您描述的顺序进行构造。


没问题。我认为你的“邮政编码技能”很好 :) car.cpp应该长什么样?它应该长得像Car :: Car(int wheel){}这样吗? - user27279
这正是我在那里得到的,汽车构造函数的精确实现。车辆构造函数将大致相同 Vehicle::Vehicle(int wheels) {/* do stuff */ } - Michael Wilson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接